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.

  • 🧮 Viis operaatorite perekonda: Relatsioonilised, aritmeetilised, loogilised, komplekstüübi ja konstruktori operaatorid katavad kõik avaldised, mida HiveQL päring vajab.
  • 🔍 Võrdlus võtab mis tahes primitiivi: Relatsioonioperaatorid aktsepteerivad kõiki primitiivtüüpe, samas kui LIKE, RLIKE ja REGEXP töötavad ainult stringidega.
  • ➕ Aritmeetika hõlmab bitipõhist tööd: Lisaks neljale põhioperatsioonile pakub HiveQL arvutüüpidele modulo- ja bitipõhist AND, OR, XOR ja NOT operaatorit.
  • 🧩 Pesastatud andmetel on oma süntaks: A[n] jõuab massiivi elemendini ja M[võti] jõuab kaardi väärtuseni, mõlemat saab kasutada kõikjal, kus avaldis on lubatud.
  • 🏗️ Konstruktorid loovad keerulisi väärtusi: array(), map(), struct(), named_struct() ja create_union() panevad päringu sees kokku keerukaid veerge.
  • 📚 Funktsioonid laiendavad operaatoreid: Matemaatilised, string-, kuupäeva-, tingimus-, kogum- ja agregaatfunktsioonid käsitlevad tööd, mida ükski operaator ei kata.

Mis on Hive Query Language'i (HiveQL) operaatorid?

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.

KKK

Märksõnad, operaatorsõnad (nt AND või LIKE) ja funktsioonide nimed lahendavad suur- ja väiketähti eristamata, seega SELECT ja select käituvad samamoodi. Stringandmed seda ei tee: 'Müük' ja 'müük' võrdlemine tagastab väärtuse FALSE, kui esmalt ei rakendata funktsiooni upper() või lower().

X / Y tagastab alati KAHEKORDSE arvu, isegi kui mõlemad operandid on täisarvud, seega 7 / 2 annab tulemuseks 3.5, mitte 3. Täisarvude jagamiseks kasutage märksõna DIV ja jäägi jagamiseks operaatorit %.

Aritmeetika- ja võrdlusoperaatorid levitavad NULL-i: iga NULL-i sisaldav avaldis annab NULL-i, mitte FALSE-i. Testi IS NULL-i või IS NOT NULL-i olemasolu ja asenda varuoperaator coalesce() või nvl()-iga enne, kui väärtus operaatorini jõuab.

LIKE kasutab SQL-i metamärke, kus % sobib mis tahes märkide jadaga ja _ sobib ühega. RLIKE sobib a-ga Java regulaaravaldis väärtuse mis tahes alamstringi suhtes. REGEXP on RLIKE sünonüüm ja käitub identselt.

Aritmeetilised operaatorid seovad esmalt, seejärel võrdlusoperaatorid, seejärel NOT, seejärel AND ja lõpuks OR. Kuna pikkade predikaatide puhul on järjestust lihtne valesti lugeda, on soovitatav kasutada sulgusid alati, kui AND ja OR esinevad samas lauses.

Jah. Relatsioonilised ja loogilised operaatorid moodustavad liitumistingimusi, aritmeetilised operaatorid saavad genereerida rühmi.ping võtmed ja komplekstüüpi ligipääs, näiteks M[võti], kehtib kõikjal, kus avaldis on lubatud, sealhulgas SELECT-loendid, WHERE-klauslid ja ORDER BY.

Masinõppe assistendid tõlgivad lihtkeelse filtri kandidaadipredikaadiks ja märgistavad tüübi mittevastavused, näiteks stringiveeru võrdlemine numbriga. Kinnitage genereeritud operaator alati ülaltoodud tabelite alusel, sest dialektid erinevad Hive'is. Spark SQL ja Presto.

See käsitleb levinud predikaate hästi ja pakub lühikese kommentaari põhjal välja coalesce() või CASE WHEN mustreid. See segab ka süntaksit teistest mootoritest, seega kontrollige enne päringu käivitamist bitipõhiseid operaatoreid, komplekstüüpi juurdepääsu ja mis tahes funktsiooni nime DESCRIBE FUNCTION abil.

Võta see postitus kokku järgmiselt: