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.

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.
