Što je Hive Query Language? HiveQL Operaulagatelji

⚡ Pametni sažetak

Hive Query Language pruža operatore koji pokreću svaki HiveQL izraz, grouping razvrstati ih u relacijske, aritmetičke, logičke, kompleksne tipove i konstruktorske obitelji koje zajedno pokrivaju usporedbu, izračun i pristup ugniježđenim podacima.

  • 🧮 Pet obitelji operatora: Relacijski, aritmetički, logički, kompleksni i konstruktorski operatori pokrivaju svaki izraz koji je potreban HiveQL upitu.
  • 🔍 Usporedba uzima bilo koju primitivu: Relacijski operatori prihvaćaju sve primitivne tipove, dok LIKE, RLIKE i REGEXP rade samo s nizovima znakova.
  • Aritmetika uključuje bitovni rad: Osim četiri osnovne operacije, HiveQL nudi i modulo i bitne AND, OR, XOR i NOT na brojevnim tipovima.
  • 🧩 Ugniježđeni podaci imaju svoju vlastitu sintaksu: A[n] doseže element polja, a M[key] doseže vrijednost mape, oboje upotrebljivo bilo gdje gdje je dopušten izraz.
  • 🏗️ Konstruktori grade složene vrijednosti: array(), map(), struct(), named_struct() i create_union() sastavljaju složene stupce unutar upita.
  • 📚 Funkcije proširuju operatore: Matematičke, string, datumske, uvjetne, kolekcijske i agregacijske funkcije obrađuju rad koji ne pokriva nijedan operator.

Što su operatori Hive Query Language (HiveQL)?

Što je Hive Query Language (HiveQL)?

Hive Query Language (HiveQL) je upitni jezik u Apache košnica za obradu i analizu strukturiranih podataka. Odvaja korisnike od složenosti MapReduce programiranja. Ponovno koristi uobičajene koncepte iz relacijskih baza podataka, kao što su tablice, retci, stupci i sheme, radi lakšeg učenja. Hive pruža CLI za pisanje Hive upita pomoću Hive Query Language (HiveQL).

Većina interakcija obično se odvija preko sučelja naredbenog retka (CLI). Općenito, HiveQL sintaksa je slična sintaksi SQL sintaksa s kojom je većina analitičara podataka upoznata. Četiri formata datoteka navedena u izvornoj Hive dokumentaciji su TEXTFILE, SEQUENCEFILE, ORC i RCFILE (Record Columnar File); trenutna izdanja također čitaju i pišu Parquet i Avro, a ORC je format koji većina smjernica za podešavanje pretpostavlja.

Hive koristi ugrađenu Derby bazu podataka za pohranu metapodataka za jednog korisnika. Za implementacije s više korisnika ili dijeljene metapohrane, Hive koristi MySQL ili neku drugu vanjsku relacijsku bazu podataka, jer Derby dopušta samo jednu sesiju istovremeno.

Ugrađen HiveQL Operaulagatelji

Hive nudi ugrađene operatore za operacije s podacima koje se izvršavaju na tablicama koje se nalaze u Hive skladištu.

Ovi operatori djeluju na operande unutar izraza i vraćaju vrijednost prema primijenjenoj logici, bilo da je ta logika usporedba, izračun ili pretraživanje u ugniježđenom stupcu.

U nastavku su navedene glavne vrste ugrađenih operatora u HiveQL-u:

  • Relacijski operatori
  • Aritmetički operatori
  • logički operatori
  • Operatori na složenim tipovima
  • Konstruktori složenog tipa

Svaka obitelj je obrađena u vlastitom odjeljku u nastavku, s potpunom tablicom operatora za tu obitelj.

Relacijski Operatori u HiveQL-u

Za usporedbu odnosa između dva operanda koristimo relacijske operatore.

  • Operaizrazi kao što su jednako, nije jednako, manje od i veće od.
  • Tipovi operanada u ovim operatorima su svi primitivni tipovi, a operatori za prepoznavanje uzoraka prihvaćaju samo nizove znakova.

Svaki relacijski operator vraća BOOLEAN, zbog čega se od tih operatora grade WHERE klauzula, JOIN uvjet i CASE WHEN grana. Sljedeća tablica daje detalje o relacijskim operatorima i njihovoj upotrebi u HiveQL-u:

Ugrađen Operahumka Description Operand
X = Y TRUE ako je izraz X ekvivalentan izrazu Y. Inače FALSE. Uzima sve primitivne tipove
X != Y TRUE ako izraz X nije ekvivalentan izrazu Y. Inače FALSE. Uzima sve primitivne tipove
X < Y TRUE ako je izraz X manji od izraza Y. Inače FALSE. Uzima sve primitivne tipove
X <= Y TRUE ako je izraz X manji ili jednak izrazu Y. Inače FALSE. Uzima sve primitivne tipove
X > Y TRUE ako je izraz X veći od izraza Y. Inače FALSE. Uzima sve primitivne tipove
X > = Y TRUE ako je izraz X veći ili jednak izrazu Y. Inače FALSE. Uzima sve primitivne tipove
X JE NULL TRUE ako izraz X ima vrijednost NULL, inače FALSE. Uzima sve vrste
X NIJE NULL FALSE ako se izraz X evaluira kao NULL, inače TRUE. Uzima sve vrste
X KAO Y TRUE ako se uzorak niza X podudara s Y, inače FALSE. Uzima samo žice
X RLIKE Y NULL ako je X ili Y NULL, TRUE ako bilo koji podniz od X odgovara Java regularni izraz Y, inače FALSE. Uzima samo žice
X REGEXP Y Isto kao RLIKE. Uzima samo žice

Imajte na umu da usporedba s NULL nikada ne vraća TRUE ili FALSE. To je razlog zašto tablica navodi IS NULL i IS NOT NULL kao zasebne operatore, umjesto da se očekuje da X = NULL radi.

HiveQL aritmetika Operaulagatelji

Za izvođenje aritmetičkih operacija nad operandima koristimo aritmetičke operatore.

  • Aritmetičke operacije kao što su zbrajanje, oduzimanjetracMnoženje i dijeljenje između operanada koriste ove operatore.
  • Svi tipovi operanda u ovim operatorima su brojevni tipovi.

Primjer:

2 + 3 daje rezultat 5.

U ovom primjeru, '+' je operator, 2 i 3 su operandi, a povratna vrijednost je 5.

Sljedeća tablica daje detalje o aritmetičkim operatorima u Hive Query Languageu:

Ugrađen Operahumka Description Operand
X+Y Vratit će rezultat zbrajanja vrijednosti X i Y. Uzima sve vrste brojeva
X–Y Vratit će izlaz podprogramatracodvajanje Y od X vrijednosti. Uzima sve vrste brojeva
X * Y Vratit će izlaz množenja X i Y vrijednosti. Uzima sve vrste brojeva
X / Y Vratit će izlaz dijeljenja Y od X. Uzima sve vrste brojeva
X % Y Vratit će ostatak koji je rezultat dijeljenja X s Y. Uzima sve vrste brojeva
X & Y Vratit će izlaz bitovnog I X i Y. Uzima sve vrste brojeva
X | Y Vratit će izlaz bitovnog ILI X i Y. Uzima sve vrste brojeva
X ^ Y Vratit će izlaz bitovnog XOR X i Y. Uzima sve vrste brojeva
~X Vratit će izlaz bit-bitno NOT od X. Uzima sve vrste brojeva

Posljednja četiri retka su bitna, a ne obična aritmetika: oni operiraju na binarnom prikazu cjelobrojnih operanada, pa &, | i ^ nisu isti kao logički AND, OR i NOT koji su obrađeni u sljedećem odjeljku.

HiveQL Logical Operaulagatelji

Logičke operatore koristimo za izvođenje logičkih operacija nad operandima.

  • Logičke operacije poput I, ILI i NE između operanada koriste ove operatore.
  • Svi tipovi operanada u ovim operatorima su tipa BOOLEAN.

Sljedeća tablica daje detalje o logičkim operatorima u HiveQL-u:

Operaulagatelji Description OperanDS
X I Y TRUE ako su i X i Y TRUE, inače FALSE. Samo Booleovi tipovi
X && Y Isto kao X I Y, ali ovdje koristimo simbol &&. Samo Booleovi tipovi
X ILI Y TRUE ako su ili X ili Y ili oboje TRUE, inače FALSE. Samo Booleovi tipovi
X || Y Isto kao X ILI Y, ali ovdje koristimo simbol ||. Samo Booleovi tipovi
NE X TRUE ako je X FALSE, inače FALSE. Samo Booleovi tipovi
!X Isto kao i NOT X, ali ovdje koristimo simbol !. Samo Booleovi tipovi

Budući da relacijski operatori vraćaju BOOLEAN vrijednosti, logički operatori su ono što ih kombinira: predikat poput plaća > 50000 I odjel = 'Prodaja' povezuje jednu obitelj s drugom.

Operatorovi na složenim tipovima

Relacijski, aritmetički i logički operatori rade na pojedinačnim skalarnim vrijednostima. Hive također pohranjuje stupce nizova, mapa i struktura, a njima je potreban drugačiji mehanizam za dosezanje elemenata unutar njih. Sljedeća tablica daje detalje o složenim operatorima tipa koji pružaju taj mehanizam:

Operaulagatelji OperanDS Description
A[n] A je niz, a n je cjelobrojni tip Vratit će n-ti element u nizu A. Prvi element ima indeks 0.
M[ključ] M je karta a ključ ima tip K Vratit će vrijednost koja pripada ključu na mapi.

Oba oblika su obični izrazi, pa se mogu pojaviti u SELECT listi, WHERE klauzuli ili GROUP BY, a do strukturnog polja se dolazi točkovnom notacijom kao što je S.field umjesto zagrade.

Konstruktori složenog tipa

Tamo gdje gornji operatori čitaju postojeći složeni stupac, konstruktori grade novi. Sljedeća tablica daje detalje o konstruktorima složenih tipova koji stvaraju instance složenih tipova podataka - Array, Map i Struct - u Hiveu.

U ovom odjeljku vidjet ćemo operacije koje se izvode na konstruktorima složenih tipova.

Operaulagatelji OperanDS Description
poredak (val1, val2, …) Kreirat će niz s danim elementima kao što je spomenuto, poput val1, val2.
create_union (oznaka, vrijednost1, vrijednost2, …) Stvorit će tip unije s vrijednošću na koju se upućuje parametar oznake.
karta (ključ1, vrijednost1, ključ2, vrijednost2, …) Izradit će mapu s danim parovima ključ/vrijednost spomenutim u operandima.
imenovana_struktura (ime1, vrijednost1, ime2, vrijednost2, …) Kreirat će strukturu s danim nazivima polja i vrijednostima spomenutim u operandima.
strukt (val1, val2, val3, …) Stvara strukturu s zadanim vrijednostima polja. Nazivi polja strukture bit će stupac1, stupac2 i tako dalje.

Konstruktori se najčešće koriste u INSERT-u koji popunjava složeni stupac ili u SELECT-u koji pakira nekoliko skalarnih stupaca u jednu strukturu prije zapisivanja rezultata u drugu tablicu.

Ugrađene funkcije HiveQL-a

OperaAlati pokrivaju usporedbu, izračun i pristup elementima, ali ne zaokružuju broj, skraćuju niz ili podvrijednosti.tracdva datuma. Taj rad pripada Hiveovim ugrađenim funkcijama, koje se pozivaju po imenu unutar istih izraza u kojima se pojavljuju operatori. Tablica u nastavku grupira obitelji s kojima se početnik prvo susreće.

Obitelj funkcija Tipični članovi Za što se koristi
Matematički okruglo(), pod(), strop(), apsolutno(), snaga(), kvadrat(), nasumično() Zaokruživanje, potencije i drugi numerički izračuni na vrijednosti jednog stupca.
Niz concat(), substr(), gornji(), donji(), trim(), duljina(), regexp_replace() Čišćenje, obrezivanje i ponovno oblikovanjeping tekst prije nego što se usporedi ili grupira.
Datum trenutni_datum, godina(), mjesec(), datum_po_datumu(), dodavanje_datuma(), unix_vremenska_oznaka() Extracrastavljanje dijelova datuma i mjerenje intervala između dva datuma.
kondicional ako(), SLUČAJ KADA, spajanje(), nvl(), isnull() Odabir vrijednosti na razini retka i zamjena NULL-a rezervnom vrijednošću.
Kolekcija veličina(), ključevi_mape(), vrijednosti_mape(), polje_sadrži(), sortiraj_polje() Pregledavanje stupaca polja, mape i strukture do kojih su došli operatori kompleksnog tipa.
Pretvorba tipa cast(), binarni() Prisilno dodjeljivanje stupca u tip koji operator očekuje.
Agregat (UDAF) broj(), zbroj(), prosjek(), min(), maks(), skup_prikupljanja() Sažimanje više redaka u jednu vrijednost, obično uz GROUP BY.

Popis funkcija ovisi o izdanju Hivea, pa ga je bolje čitati iz same sesije, a ne sa statičke stranice. To čine dvije naredbe:

SHOW FUNCTIONS;

DESCRIBE FUNCTION round;

DESCRIBE FUNCTION EXTENDED round;

SHOW FUNCTIONS navodi svako registrirano ime, DESCRIBE FUNCTION ispisuje potpis u jednom retku, a EXTENDED oblik dodaje primjere upotrebe tamo gdje ih implementacijska klasa navodi. Kada nijedna ugrađena funkcija ne odgovara, Hive prihvaća korisnički definirana funkcija napisan u Java.

HiveQL vs SQL: Ključne razlike

HiveQL namjerno posuđuje SQL sintaksu, a tablice operatora iznad izgledat će poznato svima koji su pisali SQL. Model izvršavanja ispod nije isti, a razlike se pojavljuju čim upit prijeđe okvire jednostavnog SELECT-a.

ponašanje HiveQL Tradicionalni SQL (RDBMS)
Upravljanje shemom Shema pri čitanju — shema se primjenjuje kada se datoteka upita Shema pri pisanju — shema se provodi kada se umetne redak
AŽURIRANJE i BRISANJE na razini retka Podržano samo na ACID tablicama; upravljane tablice su ACID prema zadanim postavkama od Hive 3.0 Podržano na svakoj tablici prema zadanim postavkama
Indeksi Podrška za indeksiranje uklonjena je u Hiveu 3.0 (HIVE-18448); zamjenjuju je ORC ili Parquet indeksi na razini datoteka i materijalizirani prikazi. B-stablo i drugi sekundarni indeksi su ključna značajka
Izvršenje i latencija Kompajlira u batch poslove na Tez-u, MapReduce-u ili Spark, tako da čak i mali upiti imaju početne troškove posla Interaktivno izvršavanje, obično u milisekundama
Cilj dizajna Propusnost kroz vrlo velike datoteke na HDFS-u ili spremištu objekata Čitanje i pisanje s malom latencijom na jednom poslužitelju ili klasteru

Praktične posljedice za pisanje izraza su male, ali stvarne. OperaOperatori se ponašaju kako se očekuje, no predikat na koji bi se odgovorilo iz indeksa u relacijskoj bazi podataka u Hiveu se odgovara skeniranjem datoteka, pa filtriranje na stupcu particije obično vrijedi puno više od podešavanja samog operatora.

Pitanja i odgovori

Ključne riječi, operatorske riječi poput AND ili LIKE i nazivi funkcija rješavaju se neovisno o velikim i malim slovima, pa se SELECT i select ponašaju isto. Podaci niza znakova se ne ponašaju isto: usporedba 'Sales' s 'sales' vraća FALSE osim ako se prvo ne primijeni upper() ili lower().

X / Y uvijek vraća DOUBLE, čak i kada su oba operanda cijeli brojevi, pa 7 / 2 daje 3.5 umjesto 3. Koristite ključnu riječ DIV za cjelobrojno dijeljenje i operator % za ostatak.

Aritmetički i operatori usporedbe propagiraju NULL: svaki izraz koji sadrži NULL evaluira se kao NULL, a ne kao FALSE. Testirajte s IS NULL ili IS NOT NULL i zamijenite rezervni izraz s coalesce() ili nvl() prije nego što vrijednost dosegne operator.

LIKE koristi SQL zamjenske znakove, gdje % odgovara bilo kojem nizu znakova, a _ odgovara jednom. RLIKE odgovara Java regularni izraz za bilo koji podniz vrijednosti. REGEXP je sinonim za RLIKE i ponaša se identično.

Aritmetički operatori se prvo vežu, zatim operatori usporedbe, zatim NE, zatim I, pa ILI. Budući da je redoslijed lako pogrešno pročitati u dugim predikatima, preporučuju se zagrade kad god se I i ILI pojavljuju u istoj klauzuli.

Da. Relacijski i logički operatori formiraju uvjete spajanja, aritmetički operatori mogu proizvesti grupuping ključevi, a pristup složenog tipa kao što je M[ključ] valjan je gdje god je izraz dopušten, uključujući SELECT liste, WHERE klauzule i ORDER BY.

Pomoćnici za strojno učenje prevode filter na običnom jeziku u kandidatski predikat i označavaju neusklađenosti tipova, kao što je usporedba stupca niza znakova s ​​brojem. Uvijek provjerite generirani operator u odnosu na gornje tablice, jer se dijalekti razlikuju između Hivea, Spark SQL i Presto.

Dobro obrađuje uobičajene predikate i predlaže obrasce coalesce() ili CASE WHEN iz kratkog komentara. Također miješa sintaksu iz drugih mehanizama, stoga provjerite bitne operatore, pristup složenog tipa i bilo koji naziv funkcije s DESCRIBE FUNCTION prije pokretanja upita.

Sažmite ovu objavu uz: