Š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.

Š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.
