Mikä on Hive-kyselykieli? HiveQL OperaTors

⚡ Älykäs yhteenveto

Hive Query Language tarjoaa operaattorit, jotka ohjaavat jokaista HiveQL-lauseketta, ryhmääping ne relaatio-, aritmeettisiin, loogisiin, kompleksityyppisiin ja konstruktoriperheisiin, jotka yhdessä kattavat vertailun, laskennan ja sisäkkäisten tietojen käytön.

  • 🧮 Viisi operaattoriperhettä: Relaatio-, aritmeettiset, loogiset, kompleksityyppiset ja konstruktorioperaattorit kattavat kaikki HiveQL-kyselyn tarvitsemat lausekkeet.
  • 🔍 Vertailussa otetaan huomioon mikä tahansa primitiivinen: Relaatio-operaattorit hyväksyvät kaikki alkeistyypit, kun taas LIKE, RLIKE ja REGEXP toimivat vain merkkijonoilla.
  • Aritmetiikka sisältää bittikohtaisen työn: Neljän perusoperaation lisäksi HiveQL mahdollistaa numerotyypeille modulo- ja bittikohtaisia ​​AND-, OR-, XOR- ja NOT-operaatioita.
  • 🧩 Sisäkkäisellä datalla on oma syntaksinsa: A[n] saavuttaa taulukon alkion ja M[avain] saavuttaa map-arvon, molemmat ovat käytettävissä missä tahansa, missä lauseke on sallittu.
  • 🏗️ Konstruktorit muodostavat monimutkaisia ​​arvoja: array(), map(), struct(), named_struct() ja create_union() kokoavat monimutkaisia ​​sarakkeita kyselyn sisällä.
  • 📚 Funktiot laajentavat operaattoreita: Matemaattiset funktiot, merkkijonofunktiot, päivämääräfunktiot, ehdolliset funktiot, kokoelmafunktiot ja koostefunktiot käsittelevät tehtäviä, joita operaattori ei kata.

Mitä ovat Hive Query Language (HiveQL) -operaattorit?

Mikä on Hive Query Language (HiveQL)?

Hive Query Language (HiveQL) on kyselykieli Apache Hive strukturoidun datan käsittelyyn ja analysointiin. Se erottaa käyttäjät MapReduce-ohjelmoinnin monimutkaisuudesta. Se käyttää uudelleen relaatiotietokantojen yleisiä käsitteitä, kuten taulukoita, rivejä, sarakkeita ja skeemaa, oppimisen helpottamiseksi. Hive tarjoaa komentorivikäyttöliittymän Hive-kyselyiden kirjoittamiseen Hive Query Language (HiveQL) -kielellä.

Suurin osa vuorovaikutuksista tapahtuu komentoriviliittymän (CLI) kautta. Yleensä HiveQL-syntaksi on samanlainen kuin SQL syntaksi, jonka useimmat data-analyytikot tuntevat. Alkuperäisessä Hive-dokumentaatiossa mainitut neljä tiedostomuotoa ovat TEXTFILE, SEQUENCEFILE, ORC ja RCFILE (Record Columnar File); nykyiset versiot lukevat ja kirjoittavat myös Parquet- ja Avro-tiedostomuotoja, ja ORC on muoto, jota useimmat viritysohjeet käyttävät.

Hive käyttää sulautettua Derby-tietokantaa yksittäisten käyttäjien metatietojen tallennukseen. Usean käyttäjän tai jaettujen metastoreiden käyttöönottoihin Hive käyttää MySQL tai jonkin muun ulkoisen relaatiotietokannan sijaan, koska Derby sallii vain yhden istunnon kerrallaan.

Sisäänrakennettu HiveQL OperaTors

Hive tarjoaa sisäänrakennettuja operaattoreita Hive-tietovarastossa oleville taulukoille suoritettaville dataoperaatioille.

Nämä operaattorit vaikuttavat lausekkeen sisällä oleviin operandeihin ja palauttavat arvon käytetyn logiikan mukaisesti, olipa kyseessä sitten vertailu, laskutoimitus tai haku sisäkkäisestä sarakkeesta.

Alla on lueteltu HiveQL:n sisäänrakennettujen operaattoreiden päätyypit:

  • Relaatiooperaattorit
  • Aritmeettiset operaattorit
  • loogisia operaattoreita
  • Operamonimutkaisten tyyppien tekijät
  • Monimutkaiset tyyppikonstruktorit

Jokainen perhe käsitellään omassa osiossa alla, jossa on kyseisen perheen täydellinen operaattoritaulukko.

omainen OperaHiveQL:n tekijät

Käytämme relaatiooperaattoreita kahden operandin välisten relaatiovertailuihin.

  • Operakuten yhtä suuri kuin, ei yhtä suuri kuin, pienempi kuin ja suurempi kuin.
  • Näiden operaattoreiden operandityypit ovat kaikki alkeistyyppejä, ja hahmonsovitusoperaattorit hyväksyvät vain merkkijonoja.

Jokainen relaatiooperaattori palauttaa BOOLEAN-arvon, minkä vuoksi WHERE-lauseke, JOIN-ehto ja CASE WHEN -haara rakennetaan näistä operaattoreista. Seuraava taulukko antaa tietoja relaatiooperaattoreista ja niiden käytöstä HiveQL:ssä:

Sisäänrakennettu OperaTor Tuotetiedot Operand
X = Y TOSI, jos lauseke X on yhtäpitävä lausekkeen Y kanssa. Muuten EPÄTOSI. Se kestää kaikki primitiiviset tyypit
X = Y TOSI, jos lauseke X ei ole yhtäpitävä lausekkeen Y kanssa. Muuten EPÄTOSI. Se kestää kaikki primitiiviset tyypit
X < Y TOSI, jos lauseke X on pienempi kuin lauseke Y. Muuten EPÄTOSI. Se kestää kaikki primitiiviset tyypit
X <= Y TOSI, jos lauseke X on pienempi tai yhtä suuri kuin lauseke Y. Muuten EPÄTOSI. Se kestää kaikki primitiiviset tyypit
X > Y TOSI, jos lauseke X on suurempi kuin lauseke Y. Muuten EPÄTOSI. Se kestää kaikki primitiiviset tyypit
X >= Y TOSI, jos lauseke X on suurempi tai yhtä suuri kuin lauseke Y. Muuten EPÄTOSI. Se kestää kaikki primitiiviset tyypit
X ON NULL TOSI, jos lauseke X antaa tulokseksi NULL, muuten EPÄTOSI. Se kestää kaikenlaisia
X EI OLE NULL EPÄTOSI, jos lauseke X antaa tulokseksi NULL, muuten TOSI. Se kestää kaikenlaisia
X tykkää Y TOSI, jos merkkijono X vastaa Y:tä, muuten EPÄTOSI. Kestää vain Strings
X RLIKE Y NULL, jos X tai Y on NULL, TOSI, jos mikä tahansa X:n osamerkkijono vastaa Java säännöllinen lauseke Y, muuten EPÄTOSI. Kestää vain Strings
X REGEXP Y Sama kuin RLIKE. Kestää vain Strings

Huomaa, että vertailu NULL-arvoon ei koskaan palauta arvoa TRUE tai FALSE. Tästä syystä taulukossa IS NULL ja IS NOT NULL luetellaan erillisinä operaattoreina sen sijaan, että odotettaisiin X = NULL toimivan.

HiveQL Aritmetiikka OperaTors

Käytämme aritmeettisia operaattoreita suorittamaan aritmeettisia laskutoimituksia operandeille.

  • Aritmeettiset laskutoimitukset, kuten yhteenlasku ja osalaskutracOperandien välinen kerto-, kerto- ja jakolasku käyttää näitä operaattoreita.
  • Näissä operaattoreissa operandityypit ovat kaikki numerotyyppejä.

Esimerkki:

2 + 3 antaa tulokseksi 5.

Tässä esimerkissä '+' on operaattori, 2 ja 3 ovat operandit ja paluuarvo on 5.

Seuraava taulukko antaa tietoja Hive Query Language -kyselykielen aritmeettisista operaattoreista:

Sisäänrakennettu OperaTor Tuotetiedot Operand
X+Y Se palauttaa X- ja Y-arvon lisäämisen tulosteen. Se kestää kaikki numerotyypit
X - Y Se palauttaa sub-funktion tuotoksentracY:n erottaminen X:n arvosta. Se kestää kaikki numerotyypit
X*Y Se palauttaa X- ja Y-arvojen kertomisen. Se kestää kaikki numerotyypit
X/Y Se palauttaa tuloksen, jossa Y jaetaan X:stä. Se kestää kaikki numerotyypit
X % Y Se palauttaa loppuosan, joka saadaan jakamalla X Y:llä. Se kestää kaikki numerotyypit
X & Y Se palauttaa X:n ja Y:n bittikohtaisen JA lähdön. Se kestää kaikki numerotyypit
X | Y Se palauttaa X:n ja Y:n bittikohtaisen TAI-tuloksen. Se kestää kaikki numerotyypit
X ^ Y Se palauttaa X:n ja Y:n bittikohtaisen XOR:n lähdön. Se kestää kaikki numerotyypit
~X Se palauttaa X:n EI bittikohtaisen lähdön. Se kestää kaikki numerotyypit

Neljä viimeistä riviä ovat bittikohtaisia ​​​​tavanomaisen aritmeettisen esitystavan sijaan: ne käyttävät kokonaislukuoperandien binääriesitystä, joten &, | ja ^ eivät ole samoja kuin seuraavassa osiossa käsitellyt loogiset JA, TAI ja EI.

HiveQL-looginen OperaTors

Käytämme loogisia operaattoreita loogisten operaatioiden suorittamiseen operandeille.

  • Loogiset operaatiot, kuten AND, OR ja NOT operandien välillä, käyttävät näitä operaattoreita.
  • Näissä operaattoreissa operandityypit ovat kaikki BOOLEAN-tyyppiä.

Seuraava taulukko antaa tietoja HiveQL:n loogisista operaattoreista:

OperaTors Tuotetiedot OperanDS
X JA Y TOSI, jos sekä X että Y ovat TOSI, muuten EPÄTOSI. Vain Boolen tyypit
X && Y Sama kuin X JA Y, mutta tässä käytetään &&-symbolia. Vain Boolen tyypit
X TAI Y TOSI, jos joko X tai Y tai molemmat ovat TOSI, muuten EPÄTOSI. Vain Boolen tyypit
X || Y Sama kuin X TAI Y, mutta tässä käytämme ||-symbolia. Vain Boolen tyypit
EI X TOSI, jos X on EPÄTOSI, muuten EPÄTOSI. Vain Boolen tyypit
!X Sama kuin NOT X, mutta tässä käytetään !-symbolia. Vain Boolen tyypit

Koska relaatiooperaattorit palauttavat TOTUUSARVOJA, loogiset operaattorit yhdistävät ne: predikaatti, kuten palkka > 50000 JA osasto = 'Myynti', ketjuttaa yhden perheen toiseen.

Operamonimutkaisissa tyypeissä

Relaatio-, aritmeettiset ja loogiset operaattorit toimivat kaikki yksittäisillä skalaariarvoilla. Hive tallentaa myös taulukko-, kartta- ja rakennesarakkeita, ja ne tarvitsevat eri mekanismin niiden sisällä olevien elementtien saavuttamiseksi. Seuraava taulukko antaa tietoja monimutkaisen tyypin operaattoreista, jotka tarjoavat kyseisen mekanismin:

OperaTors OperanDS Tuotetiedot
A[n] A on taulukko ja n on kokonaislukutyyppi Se palauttaa n:nnen elementin taulukosta A. Ensimmäisen elementin indeksi on 0.
M[avain] M on kartta ja avaimessa on tyyppi K Se palauttaa kartan avaimeen kuuluvan arvon.

Molemmat muodot ovat tavallisia lausekkeita, joten ne voivat esiintyä SELECT-luettelossa, WHERE-lauseessa tai GROUP BY -lausekkeessa, ja rakennekenttään päästään pistemerkinnällä, kuten S.field, hakasulkeiden sijaan.

Monimutkaiset rakentajat

Kun yllä olevat operaattorit lukevat olemassa olevan monimutkaisen sarakkeen, konstruktorit rakentavat sellaisen. Seuraava taulukko antaa tietoja monimutkaisen tyypin konstruktoreista, jotka luovat Hivessä monimutkaisten tietotyyppien – Array, Map ja Struct – instansseja.

Tässä osiossa tarkastelemme monimutkaisille tyyppikonstruktoreille suoritettavia toimintoja.

OperaTors OperanDS Tuotetiedot
ryhmä (arvo1, arvo2,…) Se luo taulukon annetuista elementeistä, kuten mainittiin, kuten val1, val2.
luo_unioni (tunniste, arvo1, arvo2, …) Se luo union-tyypin, jonka arvoon tag-parametri viittaa.
kartta (avain1, arvo1, avain2, arvo2, …) Se luo kartan, jossa on operandeissa mainitut annetut avain/arvo-parit.
nimetty_rakenne (nimi1, arvo1, nimi2, arvo2, …) Se luo Struct-objektin, jossa on operandeissa mainitut kenttien nimet ja arvot.
rakenne (arvo1, arvo2, val3, …) Luo Struct-rakenteen annetuilla kenttäarvoilla. Rakennekenttien nimet ovat sarake1, sarake2 ja niin edelleen.

Konstruktoreita käytetään useimmiten INSERT-käskyssä, joka täyttää monimutkaisen sarakkeen, tai SELECT-käskyssä, joka pakkaa useita skalaarisarakkeita yhteen rakenteeseen ennen tuloksen kirjoittamista toiseen taulukkoon.

HiveQL:n sisäänrakennetut funktiot

Operatyökalut kattavat vertailun, laskennan ja elementtien käytön, mutta ne eivät pyöristä lukua, katkaise merkkijonoa tai alaosiatrackaksi päivämäärää. Tämä työ kuuluu Hiven sisäänrakennettuihin funktioihin, joita kutsutaan nimeltä samoissa lausekkeissa, joissa operaattorit esiintyvät. Alla olevassa taulukossa on ryhmitelty perheet, joihin aloittelija törmää ensin.

Funktioperhe Tyypilliset jäsenet Mihin sitä käytetään
matemaattinen round(), floor(), eil(), abs(), pow(), sqrt(), rand() Pyöristäminen, potenssit ja muut numeeriset laskutoimitukset yhden sarakkeen arvolle.
jono concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() Puhdistus, siistiminen ja uudelleenajoping tekstiä ennen sen vertailua tai ryhmittelyä.
Päivämäärä current_date, year(), month(), datediff(), date_add(), unix_timestamp() Extracpäivämäärän osien erottaminen ja kahden päivämäärän välisten väleiden mittaaminen.
ehdollinen jos(), tapaus kun, koaleskee(), nvl(), isnull() Arvon valitseminen rivitasolla ja NULL:n korvaaminen vara-arvolla.
Kokoelma koko(), map_keys(), map_values(), array_contains(), sort_array() Tarkastetaan kompleksityyppisten operaattoreiden tavoittamia taulukko-, kartta- ja rakennesarakkeita.
Tyyppimuutos heittää(), binääri() Sarakkeen pakottaminen operaattorin odottamaan tyyppiin.
Aggregaatti (UDAF) count(), sum(), avg(), min(), max(), collect_set() Useiden rivien tiivistäminen yhdeksi arvoksi, yleensä GROUP BY -lausekkeen rinnalla.

Funktioluettelo riippuu Hive-julkaisusta, joten se kannattaa lukea itse istunnosta eikä staattisesta sivusta. Kaksi lausetta tekevät tämän:

SHOW FUNCTIONS;

DESCRIBE FUNCTION round;

DESCRIBE FUNCTION EXTENDED round;

SHOW FUNCTIONS listaa kaikki rekisteröidyt nimet, DESCRIBE FUNCTION tulostaa yhden rivin allekirjoituksen ja EXTENDED-lomake lisää käyttöesimerkkejä, jos toteuttava luokka ne toimittaa. Kun mikään sisäänrakennettu funktio ei sovi, Hive hyväksyy käyttäjän määrittämä funktio kirjoitettu Java.

HiveQL vs. SQL: Keskeiset erot

HiveQL lainaa SQL-syntaksia tarkoituksella, ja yllä olevat operaattoritaulukot näyttävät tutuilta kenelle tahansa SQL:ää kirjoittaneelle. Alla oleva suoritusmalli ei ole sama, ja erot näkyvät heti, kun kysely siirtyy yksinkertaisen SELECT-kyselyn ulkopuolelle.

Käyttäytyminen HiveQL Perinteinen SQL (RDBMS)
Kaavioiden käsittely Kaava luettaessa — kaavaa käytetään, kun tiedostoa haetaan Kaava kirjoitettaessa — kaavaa noudatetaan, kun rivi lisätään
Rivitason PÄIVITYS ja POISTA Tuettu vain ACID-taulukoissa; hallitut taulukot ovat oletusarvoisesti ACID-muodossa Hive 3.0:sta lähtien Tuettu oletusarvoisesti jokaisessa taulukossa
Indexes Indeksituki poistettiin Hive 3.0:ssa (HIVE-18448); ORC- tai Parquet-tiedostotason indeksit ja materialisoidut näkymät korvaavat sen. B-puu ja muut toissijaiset indeksit ovat ydinominaisuus
Suoritus ja latenssi Kääntyy erätöiksi Tezissä, MapReducessa tai muussa Spark, joten jopa pienillä kyselyillä on aloituskustannuksia Vuorovaikutteinen toteutus, yleensä millisekunneissa
Suunnittelutavoite Läpivirtaus erittäin suurten tiedostojen yli HDFS:ssä tai objektisäilössä Vähälatenssinen luku- ja kirjoitus yhdellä palvelimella tai klusterissa

Ilmaisukirjoittamisen käytännön seuraukset ovat pienet mutta todelliset. Operaoperaattorit käyttäytyvät odotetulla tavalla, mutta predikaattiin, johon vastattaisiin relaatiotietokannan indeksistä, Hive vastaa skannaamalla tiedostoja, joten osiosarakkeen suodattaminen on yleensä paljon arvokkaampaa kuin itse operaattorin säätäminen.

UKK

Avainsanat, operaattorisanat, kuten AND tai LIKE, ja funktioiden nimet ratkaisevat kirjainkoon riippumatta, joten SELECT ja select toimivat samalla tavalla. Merkkijonotiedot eivät toimi: 'Sales'-sanan ja 'sales'-sanan vertaaminen palauttaa arvon FALSE, ellei upper()- tai lower()-funktiota käytetä ensin.

X / Y palauttaa aina KAKSINKERTAISEN, vaikka molemmat operandit olisivat kokonaislukuja, joten 7 / 2 antaa 3.5 eikä 3. Käytä DIV-avainsanaa kokonaislukujakoon ja %-operaattoria jakojäännökseen.

Aritmeettiset ja vertailuoperaattorit levittävät NULL-arvoa: kaikki NULL-arvoa sisältävät lausekkeet antavat NULL-arvon, eivät FALSE-arvoa. Testaa IS NULL- tai IS NOT NULL -arvoilla ja korvaa varmistusmenetelmällä coalesce() tai nvl() ennen kuin arvo saavuttaa operaattorin.

LIKE käyttää SQL-jokerimerkkejä, joissa % vastaa mitä tahansa merkkijonoa ja _ vastaa yhtä merkkijonoa. RLIKE vastaa Java säännöllinen lauseke mitä tahansa arvon alimerkkijonoa vastaan. REGEXP on synonyymi RLIKE:lle ja toimii samalla tavalla.

Aritmeettiset operaattorit sitovat ensin, sitten vertailuoperaattorit, sitten EI, sitten JA ja lopuksi TAI. Koska järjestys on helppo tulkita väärin pitkissä predikaateissa, sulkeiden käyttöä suositellaan aina, kun JA ja TAI esiintyvät samassa lausekkeessa.

Kyllä. Relaatio- ja loogiset operaattorit muodostavat liitosehtoja, aritmeettiset operaattorit voivat tuottaa ryhmiä.ping avaimet, ja kompleksityyppinen käyttö, kuten M[avain], on kelvollinen kaikkialla, missä lauseke on sallittu, mukaan lukien SELECT-listat, WHERE-lauseet ja ORDER BY.

Koneoppimisen avustajat kääntävät selkokielisen suodattimen ehdokaspredikaatiksi ja merkitsevät tyyppien yhteensopimattomuudet, kuten merkkijonosarakkeen vertaamisen lukuun. Vahvista aina luotu operaattori yllä olevien taulukoiden avulla, koska murteet vaihtelevat Hiven välillä. Spark SQL ja Presto.

Se käsittelee yleisiä predikaatteja hyvin ja ehdottaa coalesce()- tai CASE WHEN -malleja lyhyestä kommentista. Se yhdistää myös syntaksia muista hakukoneista, joten tarkista bittikohtaiset operaattorit, kompleksityyppiset käyttöoikeudet ja kaikki funktioiden nimet DESCRIBE FUNCTION -komennolla ennen kyselyn suorittamista.

Tiivistä tämä viesti seuraavasti: