Mis on Hive'i päringukeel? HiveQL Operatorse
⚡ Nutikas kokkuvõte
Hive Query Language pakub operaatoreid, mis juhivad iga HiveQL-i avaldist, gruppiping need relatsioonilisteks, aritmeetilisteks, loogilisteks, komplekstüübilisteks ja konstruktoritüüpideks, mis koos hõlmavad võrdlemist, arvutamist ja juurdepääsu pesastatud andmetele.
Mis on Hive päringukeel (HiveQL)?
Hive Query Language (HiveQL) on päringukeel Apache taru struktureeritud andmete töötlemiseks ja analüüsimiseks. See eraldab kasutajad MapReduce'i programmeerimise keerukusest. See taaskasutab relatsioonandmebaasidest pärit levinud kontseptsioone, nagu tabeleid, ridu, veerge ja skeeme, et hõlbustada õppimist. Hive pakub CLI-d Hive'i päringute kirjutamiseks, kasutades Hive Query Language'i (HiveQL).
Enamik interaktsioone toimub tavaliselt käsurea liidese (CLI) kaudu. Üldiselt on HiveQL-i süntaks sarnane SQL süntaks, millega enamik andmeanalüütikuid on tuttavad. Hive'i algses dokumentatsioonis nimetatud neli failivormingut on TEXTFILE, SEQUENCEFILE, ORC ja RCFILE (Record Columnar File); praegused versioonid loevad ja kirjutavad ka Parqueti ja Avro faile ning ORC on vorming, mida enamik häälestamisjuhiseid eeldab.
Hive kasutab ühe kasutaja metaandmete salvestamiseks manustatud Derby andmebaasi. Mitme kasutaja või jagatud metaandmete juurutuste puhul kasutab Hive MySQL või hoopis mõni muu väline relatsioonandmebaas, sest Derby lubab korraga ainult ühte seanssi.
Sisseehitatud HiveQL Operatorse
Hive pakub sisseehitatud operaatoreid andmetoimingute jaoks, mis töötavad Hive'i laos olevate tabelite vastu.
Need operaatorid toimivad avaldise sees olevate operandide põhjal ja tagastavad väärtuse vastavalt rakendatud loogikale, olgu see siis võrdlus, arvutus või otsing pesastatud veerust.
Allpool on toodud HiveQL-i sisseehitatud operaatorite peamised tüübid:
- Relatsioonilised operaatorid
- Aritmeetilised operaatorid
- loogiline operaatorid
- Operakeerukate tüüpide puhul
- Kompleksse tüübi konstruktorid
Iga perekonda käsitletakse allpool omaette jaotises koos selle perekonna täieliku operaatorite tabeliga.
Suhteline OperaHiveQL-i torid
Kahe operandi vaheliste seoste võrdlemiseks kasutame relatsioonioperaatoreid.
- Operasellised terminid nagu võrdne, mitte võrdne, väiksem kui ja suurem kui.
- Nendes operaatorites on operanditüübid kõik primitiivtüübid ja mustrite sobitamise operaatorid aktsepteerivad ainult stringe.
Iga relatsioonioperaator tagastab BOOLEAN-väärtuse, mistõttu WHERE-klausel, JOIN-tingimus ja CASE WHEN-haru ehitatakse just nendest operaatoritest. Järgmises tabelis on toodud üksikasjad relatsioonioperaatorite ja nende kasutamise kohta HiveQL-is:
| Sisseehitatud Operator | Kirjeldus | Operand |
|---|---|---|
| X = Y | TÕENE, kui avaldis X on samaväärne avaldisega Y. Muul juhul VÄÄR. | See võtab kõik primitiivsed tüübid |
| X ! = Y | TÕENE, kui avaldis X ei ole avaldisega Y samaväärne. Muidu VÄÄR. | See võtab kõik primitiivsed tüübid |
| X < Y | TÕENE, kui avaldis X on väiksem kui avaldis Y. Muul juhul VÄÄR. | See võtab kõik primitiivsed tüübid |
| X <= Y | TÕENE, kui avaldis X on väiksem või võrdne avaldisega Y. Muul juhul VÄÄR. | See võtab kõik primitiivsed tüübid |
| X > Y | TÕENE, kui avaldis X on suurem kui avaldis Y. Muul juhul VÄÄR. | See võtab kõik primitiivsed tüübid |
| X >= Y | TÕENE, kui avaldis X on suurem või võrdne avaldisega Y. Muul juhul VÄÄR. | See võtab kõik primitiivsed tüübid |
| X ON NULL | TÕENE, kui avaldis X annab tulemuseks NULL, vastasel juhul VÄÄR. | See võtab kõik tüübid |
| X EI OLE NULL | FALSE, kui avaldis X annab tulemuseks NULL, vastasel juhul TRUE. | See võtab kõik tüübid |
| X MEELDIB Y | TÕENE, kui stringi muster X vastab Y-le, vastasel juhul VÄÄR. | Võtab ainult stringe |
| X RIME Y | NULL, kui X või Y on NULL, TRUE, kui mõni X-i alamstring sobib Java regulaaravaldis Y, muidu FALSE. | Võtab ainult stringe |
| X REGEXP Y | Sama mis RLIKE. | Võtab ainult stringe |
Pane tähele, et võrdlus NULL-iga ei tagasta kunagi väärtust TRUE ega FALSE. Seetõttu loetleb tabel IS NULL ja IS NOT NULL eraldi operaatoritena, selle asemel et eeldada, et X = NULL töötaks.
HiveQL Aritmeetika Operatorse
Aritmeetiliste operaatorite abil teostame operande.
- Aritmeetilised tehted, näiteks liitmine, alalõikaminetracOperandide vaheline korrutamine ja jagamine kasutab neid operaatoreid.
- Nendes operaatorites on kõik operanditüübid arvutüübid.
Näidisnäide:
2 + 3 annab tulemuseks 5.
Selles näites on '+' operaator, 2 ja 3 operandid ning tagastusväärtus on 5.
Järgmises tabelis on toodud üksikasjad Hive'i päringukeele aritmeetiliste operaatorite kohta:
| Sisseehitatud Operator | Kirjeldus | Operand |
|---|---|---|
| X+Y | See tagastab X ja Y väärtuse lisamise väljundi. | See võtab kõik numbritüübid |
| X–Y | See tagastab alamfunktsiooni väljunditracY väärtuse eristamine X väärtusest. | See võtab kõik numbritüübid |
| X * Y | See tagastab X ja Y väärtuste korrutamise väljundi. | See võtab kõik numbritüübid |
| X/Y | See tagastab väljundi Y jagamisel X-st. | See võtab kõik numbritüübid |
| X % Y | See tagastab jäägi, mis saadakse X jagamisel Y-ga. | See võtab kõik numbritüübid |
| X ja Y | See tagastab X ja Y bitipõhise AND väljundi. | See võtab kõik numbritüübid |
| X | Y | See tagastab X ja Y bitipõhise VÕI väljundi. | See võtab kõik numbritüübid |
| X ^ Y | See tagastab X ja Y bitipõhise XOR väljundi. | See võtab kõik numbritüübid |
| ~X | See tagastab X-i bitipõhise väljundi EI. | See võtab kõik numbritüübid |
Viimased neli rida on bitipõhised, mitte tavalised aritmeetilised: need opereerivad täisarvuliste operandide binaaresitusega, seega &, | ja ^ ei ole samad, mis järgmises osas käsitletavad loogilised operaatorid AND, OR ja NOT.
HiveQL loogiline Operatorse
Loogilisi operaatoreid kasutame operandidega loogiliste operatsioonide sooritamiseks.
- Loogilised operatsioonid nagu AND, OR ja NOT operandide vahel kasutavad neid operaatoreid.
- Nendes operaatorites on kõik operanditüübid BOOLEAN-tüüpi.
Järgmises tabelis on toodud üksikasjad HiveQL-i loogiliste operaatorite kohta:
| Operatorse | Kirjeldus | Operands |
|---|---|---|
| X JA Y | TÕENE, kui nii X kui ka Y on TÕENED, vastasel juhul VÄÄR. | Ainult Boole'i tüübid |
| X && Y | Sama mis X JA Y, aga siin kasutame sümbolit &&. | Ainult Boole'i tüübid |
| X VÕI Y | TÕENE, kui kas X või Y või mõlemad on TÕENE, vastasel juhul VÄÄR. | Ainult Boole'i tüübid |
| X || Y | Sama mis X VÕI Y, aga siin kasutame sümbolit ||. | Ainult Boole'i tüübid |
| MITTE X | TÕENE, kui X on FALSE, vastasel juhul VÄÄR. | Ainult Boole'i tüübid |
| !X | Sama mis NOT X, aga siin kasutame sümbolit !. | Ainult Boole'i tüübid |
Kuna relatsioonioperaatorid tagastavad BOOLEAN-väärtusi, on loogilised operaatorid need, mis neid ühendavad: predikaat, näiteks palk > 50000 JA osakond = 'Müük', aheldab ühe perekonna teiseks.
Operakeeruliste tüüpide kohta
Relatsioonilised, aritmeetilised ja loogilised operaatorid töötavad kõik ühe skalaarse väärtusega. Hive salvestab ka massiivi, kaardi ja struktuuri veerge ning nende elementideni jõudmiseks on vaja teistsugust mehhanismi. Järgmises tabelis on toodud üksikasjad keeruka tüübi operaatorite kohta, mis seda mehhanismi pakuvad:
| Operatorse | Operands | Kirjeldus |
|---|---|---|
| A[n] | A on massiiv ja n on täisarvu tüüp | See tagastab massiivi A n-nda elemendi. Esimese elemendi indeks on 0. |
| M[võti] | M on kaart ja võtmel on tüüp K | See tagastab kaardil olevale võtmele kuuluva väärtuse. |
Mõlemad vormid on tavalised avaldised, seega võivad need esineda SELECT-loendis, WHERE-klauslis või GROUP BY-klauslis ning struktuuriväljale jõutakse punktitähistusega, näiteks S.field, mitte nurksulgudes.
Kompleksset tüüpi konstruktorid
Kui ülaltoodud operaatorid loevad olemasolevat keerukat veergu, siis konstruktorid loovad selle. Järgmises tabelis on toodud üksikasjad keeruka tüübi konstruktorite kohta, mis loovad Hive'is keerukate andmetüüpide – Array, Map ja Struct – eksemplare.
Selles jaotises vaatleme keerukate tüübikonstruktoritega tehtavaid toiminguid.
| Operatorse | Operands | Kirjeldus |
|---|---|---|
| massiivi | (val1, val2, …) | See loob massiivi antud elementidega, nagu mainitud, näiteks val1, val2. |
| loo_liit | (silt, val1, val2, …) | See loob ühendtüübi väärtusega, millele viitab parameeter silt. |
| kaart | (võti1, väärtus1, võti2, väärtus2, …) | See loob kaardi operandides mainitud antud võtme/väärtuse paaridega. |
| nimega_struktuur | (nimi1, väärtus1, nimi2, väärtus2, …) | See loob struktuuri operandides mainitud antud väljanimede ja väärtustega. |
| struktuur | (val1, val2, val3, …) | Loob antud väljaväärtustega struktuuri. Struktuuri väljanimed on veerg1, veerg2 jne. |
Konstruktoreid kasutatakse kõige sagedamini INSERT-käsus, mis täidab keeruka veeru, või SELECT-käsus, mis pakib mitu skalaarset veergu ühte struktuuri enne tulemuse teise tabelisse kirjutamist.
HiveQL sisseehitatud funktsioonid
OperaTestid hõlmavad võrdlemist, arvutamist ja elementide juurdepääsu, kuid need ei ümarda arvu, kärbi stringi ega alamjaotust.tract kaks kuupäeva. See töö kuulub Hive'i sisseehitatud funktsioonide hulka, mida nimetatakse nimepidi samades avaldistes, milles operaatorid esinevad. Allolev tabel rühmitab perekonnad, kellega algaja esimesena kohtub.
| Funktsioonide perekond | Tüüpilised liikmed | Milleks seda kasutatakse |
|---|---|---|
| Matemaatiline | ümmargune(), põranda(), lagi(), abs(), pow(), sqrt(), rand() | Ümardamine, astmed ja muud numbrilised arvutused ühe veeru väärtuse põhjal. |
| nöör | concat(), substr(), upper(), lower(), trim(), length(), regulaaravaldise_asendus() | Puhastamine, trimmimine ja uuesti raseerimineping tekst enne selle võrdlemist või rühmitamist. |
| kuupäev | praegune_kuupäev, aasta(), kuu(), dateeritud(), kuupäeva_lisamine(), unix_timestamp() | ExtracKuupäeva osade eristamine ja kahe kuupäeva vaheliste intervallide mõõtmine. |
| tingimuslik | kui(), juhtumi korral, koaleerub(), nvl(), isnull() | Väärtuse valimine rea tasemel ja NULL-i asendamine varuväärtusega. |
| kogumine | suurus(), kaardi_võtmed(), kaardi_väärtused(), massiiv_sisaldab(), sort_massiiv() | Komplekstüüpi operaatorite poolt ligipääsetavate massiivi, kaardi ja struktuuri veergude uurimine. |
| Tüübi teisendamine | valatud(), binaarne() | Veeru sundimine operaatori poolt oodatavasse tüüpi. |
| Agregaat (UDAF) | loenda(), summa(), keskmine(), min(), max(), kogu_komplekt() | Paljude ridade kokkukoondamine üheks väärtuseks, tavaliselt koos funktsiooniga GROUP BY. |
Funktsioonide loend sõltub Hive'i versioonist, seega tasub seda lugeda seansist endast, mitte staatiliselt lehelt. Selleks on kaks lauset:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
SHOW FUNCTIONS loetleb kõik registreeritud nimed, DESCRIBE FUNCTION prindib üherealise allkirja ja EXTENDED vorm lisab kasutusnäiteid, kui rakendav klass need pakub. Kui ükski sisseehitatud funktsioon ei sobi, aktsepteerib Hive kasutaja määratletud funktsioon sisse kirjutatud Java.
HiveQL vs SQL: peamised erinevused
HiveQL laenab SQL-süntaksit teadlikult ja ülaltoodud operaatorite tabelid tunduvad tuttavad kõigile, kes on SQL-i kirjutanud. Allolev täitmismudel pole sama ja erinevused ilmnevad kohe, kui päring liigub lihtsast SELECT-ist kaugemale.
| Käitumine | HiveQL | Traditsiooniline SQL (RDBMS) |
|---|---|---|
| Skeemide käsitlemine | Skeem lugemisel – skeemi rakendatakse faili päringu esitamisel | Skeem kirjutamisel — skeemi rakendatakse rea sisestamisel |
| Rea tasemel UPDATE ja DELETE | Toetatud ainult ACID-tabelites; hallatavad tabelid on Hive 3.0-st alates vaikimisi ACID-iga | Vaikimisi toetatud igas tabelis |
| Indexes | Indeksi tugi eemaldati Hive 3.0-s (HIVE-18448); selle asendasid ORC või Parquet failitaseme indeksid ja materialiseeritud vaated. | B-puu ja muud sekundaarsed indeksid on põhifunktsioon |
| Täitmine ja latentsus | Kompileerib pakktöödeks Tezis, MapReduce'is või Spark, seega isegi väikesed päringud toovad kaasa töö alustamise kulusid | Interaktiivne teostus, tavaliselt millisekundites |
| Disaini eesmärk | Läbilaskevõime väga suurte failide puhul HDFS-is või objektisalvestuses | Madala latentsusega lugemine ja kirjutamine ühel serveril või klastris |
Ekspressiivse kirjutamise praktiline tagajärg on väike, aga reaalne. OperaOperaatorid käituvad ootuspäraselt, kuid predikaadile, millele vastaks relatsioonandmebaasi indeks, vastab Hive failide skannimise teel, seega on partitsiooniveeru filtreerimine tavaliselt palju väärtuslikum kui operaatori enda häälestamine.

