Ce este limbajul de interogare Hive? HiveQL Operatori
โก Rezumat inteligent
Limbajul de interogare Hive furnizeazฤ operatorii care controleazฤ fiecare expresie HiveQL, grupareaping le รฎmpart รฎn familii relaศionale, aritmetice, logice, de tip complex ศi de constructori care acoperฤ รฎmpreunฤ compararea, calculul ศi accesul la date imbricate.

Ce este Hive Query Language (HiveQL)?
Hive Query Language (HiveQL) este un limbaj de interogare รฎn Apache Hive pentru procesarea ศi analizarea datelor structurate. Separฤ utilizatorii de complexitatea programฤrii MapReduce. Reutilizeazฤ concepte comune din bazele de date relaศionale, cum ar fi tabele, rรขnduri, coloane ศi scheme, pentru a facilita รฎnvฤศarea. Hive oferฤ o interfaศฤ CLI pentru scrierea de interogฤri Hive folosind Hive Query Language (HiveQL).
Cele mai multe interacศiuni tind sฤ aibฤ loc printr-o interfaศฤ de linie de comandฤ (CLI). รn general, sintaxa HiveQL este similarฤ cu SQL sintaxฤ cu care majoritatea analiศtilor de date sunt familiarizaศi. Cele patru formate de fiศier menศionate รฎn documentaศia originalฤ Hive sunt TEXTFILE, SEQUENCEFILE, ORC ศi RCFILE (Record Columnar File); versiunile actuale citesc ศi scriu ศi รฎn Parquet ศi Avro, iar ORC este formatul presupus de majoritatea ghidurilor de optimizare.
Hive foloseศte o bazฤ de date Derby รฎncorporatฤ pentru stocarea metadatelor pentru un singur utilizator. Pentru implementฤri de metastore partajate sau cu mai mulศi utilizatori, Hive foloseศte MySQL sau o altฤ bazฤ de date relaศionalฤ externฤ, deoarece Derby permite o singurฤ sesiune odatฤ.
HiveQL รฎncorporat Operatori
Hive oferฤ operatori รฎncorporaศi pentru operaศiunile de date care ruleazฤ asupra tabelelor din depozitul Hive.
Aceศti operatori acศioneazฤ asupra operanzilor din interiorul unei expresii ศi returneazฤ o valoare รฎn funcศie de logica aplicatฤ, indiferent dacฤ acea logicฤ este o comparaศie, un calcul sau o cฤutare รฎntr-o coloanฤ imbricatฤ.
Mai jos sunt principalele tipuri de operatori รฎncorporaศi รฎn HiveQL:
- Operatori relaศionali
- Operatori aritmetici
- operatorii logici
- Operatori pe tipuri complexe
- Constructori de tipuri complexe
Fiecare familie este prezentatฤ รฎn propria secศiune de mai jos, cu tabelul complet de operatori pentru familia respectivฤ.
Relaศional Operatori รฎn HiveQL
Folosim operatori relaศionali pentru compararea relaศiilor dintre doi operanzi.
- Operators precum egal cu, neegal cu, mai mic decรขt ศi mai mare decรขt.
- Tipurile de operanzi sunt toate tipuri primitive รฎn aceศti operatori, iar operatorii de potrivire a modelelor acceptฤ doar ศiruri de caractere.
Fiecare operator relaศional returneazฤ o valoare BOOLEAN, motiv pentru care aceศti operatori sunt sursa de inspiraศie pentru o clauzฤ WHERE, o condiศie JOIN ศi o ramurฤ CASE WHEN. Urmฤtorul tabel oferฤ detalii despre operatorii relaศionali ศi utilizarea lor รฎn HiveQL:
| Built-in OperaTdR | Descriere | Operand |
|---|---|---|
| X = Y | ADEVฤRAT dacฤ expresia X este echivalentฤ cu expresia Y. Altfel, FALS. | Este nevoie de toate tipurile primitive |
| X != Y | ADEVฤRAT dacฤ expresia X nu este echivalentฤ cu expresia Y. Altfel, FALS. | Este nevoie de toate tipurile primitive |
| X < Y | ADEVฤRAT dacฤ expresia X este mai micฤ decรขt expresia Y. Altfel, FALS. | Este nevoie de toate tipurile primitive |
| X <= Y | ADEVฤRAT dacฤ expresia X este mai micฤ sau egalฤ cu expresia Y. Altfel, FALS. | Este nevoie de toate tipurile primitive |
| X > Y | ADEVฤRAT dacฤ expresia X este mai mare decรขt expresia Y. Altfel, FALS. | Este nevoie de toate tipurile primitive |
| X >= Y | ADEVฤRAT dacฤ expresia X este mai mare sau egalฤ cu expresia Y. Altfel, FALS. | Este nevoie de toate tipurile primitive |
| X ESTE NUL | ADEVฤRAT dacฤ expresia X este evaluatฤ ca NULL, altfel FALSE. | Este nevoie de toate tipurile |
| X NU ESTE NUL | FALSE dacฤ expresia X este evaluatฤ ca NULL, altfel este TRUE. | Este nevoie de toate tipurile |
| X LIKE Y | ADEVฤRAT dacฤ modelul de ศir X se potriveศte cu Y, altfel FALS. | Ia doar ศiruri |
| X RIKE Y | NULL dacฤ X sau Y este NULL, TRUE dacฤ orice subศir de X se potriveศte cu Java expresie regulatฤ Y, altfel FALSE. | Ia doar ศiruri |
| X REGEXP Y | La fel ca RLIKE. | Ia doar ศiruri |
Reศineศi cฤ o comparaศie cu NULL nu returneazฤ niciodatฤ TRUE sau FALSE. Acesta este motivul pentru care tabelul listeazฤ IS NULL ศi IS NOT NULL ca operatori separaศi, รฎn loc sฤ se aศtepte ca X = NULL sฤ funcศioneze.
Aritmetica HiveQL Operatori
Folosim operatori aritmetici pentru a efectua operaศii aritmetice asupra operanzilor.
- Operaศii aritmetice precum adunarea, subdivizareatracรnmulศirea, รฎnmulศirea ศi รฎmpฤrศirea รฎntre operanzi utilizeazฤ aceศti operatori.
- Tipurile de operanzi din aceศti operatori sunt toate tipuri de numere.
Exemplu de exemplu:
2 + 3 dฤ rezultatul 5.
รn acest exemplu, โ+โ este operatorul, 2 ศi 3 sunt operanzii, iar valoarea returnatฤ este 5.
Urmฤtorul tabel oferฤ detalii despre operatorii aritmetici din limbajul de interogare Hive:
| Built-in OperaTdR | Descriere | Operand |
|---|---|---|
| X + Y | Va returna rezultatul adฤugฤrii valorii X ศi Y. | Este nevoie de toate tipurile de numere |
| X Y | Va returna ieศirea subtracdecalรขnd valoarea Y de la valoarea X. | Este nevoie de toate tipurile de numere |
| X Y | Va returna rezultatul รฎnmulศirii valorilor X ศi Y. | Este nevoie de toate tipurile de numere |
| X Y | Va returna rezultatul รฎmpฤrศirii lui Y de X. | Este nevoie de toate tipurile de numere |
| X Y | Va returna restul rezultat din รฎmpฤrศirea X la Y. | Este nevoie de toate tipurile de numere |
| X Y | Va returna ieศirea AND pe biศi a lui X ศi Y. | Este nevoie de toate tipurile de numere |
| X | Y | Va returna ieศirea OR pe biศi a X ศi Y. | Este nevoie de toate tipurile de numere |
| X ^ Y | Va returna ieศirea XOR pe biศi a X ศi Y. | Este nevoie de toate tipurile de numere |
| ~X | Va returna ieศirea pe bit NU a lui X. | Este nevoie de toate tipurile de numere |
Ultimele patru rรขnduri sunt aritmetice pe biศi, nu obiศnuite: opereazฤ pe reprezentarea binarฤ a operanzilor รฎntregi, deci &, | ศi ^ nu sunt aceleaศi cu operanศii logici AND, OR ศi NOT, abordaศi รฎn secศiunea urmฤtoare.
HiveQL Logical Operatori
Folosim operatori logici pentru a efectua operaศii logice asupra operanzilor.
- Operaศiile logice precum ศI, SAU ศi NU รฎntre operanzi utilizeazฤ aceศti operatori.
- Tipurile de operanzi รฎn aceศti operatori sunt toate de tip BOOLEAN.
Urmฤtorul tabel oferฤ detalii despre operatorii logici din HiveQL:
| Operatori | Descriere | OperaNDS |
|---|---|---|
| X ศI Y | ADEVฤRAT dacฤ atรขt X, cรขt ศi Y sunt ADEVฤRAT, รฎn caz contrar, FALS. | Numai tipurile booleene |
| X Y | La fel ca X ศi Y, dar aici folosim simbolul &&. | Numai tipurile booleene |
| X SAU Y | TRUE dacฤ X sau Y sau ambele sunt TRUE, รฎn caz contrar FALSE. | Numai tipurile booleene |
| X || Y | La fel ca X SAU Y, dar aici folosim simbolul ||. | Numai tipurile booleene |
| NU X | TRUE dacฤ X este FALS, รฎn caz contrar FALS. | Numai tipurile booleene |
| !X | La fel ca NOT X, dar aici folosim simbolul !. | Numai tipurile booleene |
Deoarece operatorii relaศionali returneazฤ valori BOOLEENE, operatorii logici sunt cei care รฎi combinฤ: un predicat precum salary > 50000 AND dept = 'Sales' รฎnlฤnศuie o familie รฎn cealaltฤ.
Operators pe Tipuri complexe
Operatorii relaศionali, aritmetici ศi logici lucreazฤ cu toศii pe valori scalare unice. Hive stocheazฤ, de asemenea, coloane de tip array, map ศi struct, iar acestea necesitฤ un mecanism diferit pentru a ajunge la elementele din interiorul lor. Tabelul urmฤtor oferฤ detalii despre operatorii de tip complex, care oferฤ acest mecanism:
| Operatori | OperaNDS | Descriere |
|---|---|---|
| Un] | A este un Array ศi n este un tip รฎntreg | Va returna al n-lea element din matricea A. Primul element are indexul 0. |
| M[cheie] | M este o hartฤ iar cheia are tipul K | Va returna valoarea aparศinรขnd cheii din hartฤ. |
Ambele forme sunt expresii obiศnuite, deci pot apฤrea รฎntr-o listฤ SELECT, o clauzฤ WHERE sau o instrucศiune GROUP BY, iar un cรขmp struct este accesat cu notaศie punct, cum ar fi S.field รฎn loc de parantezฤ.
Constructori de tip complex
Acolo unde operatorii de mai sus citesc o coloanฤ complexฤ existentฤ, constructorii construiesc una. Tabelul urmฤtor oferฤ detalii despre constructorii de tipuri complexe, care creeazฤ instanศe ale tipurilor de date complexe โ Array, Map ศi Struct โ รฎn Hive.
รn aceastฤ secศiune, vom vedea operaศiunile efectuate asupra constructorilor de tipuri complexe.
| Operatori | OperaNDS | Descriere |
|---|---|---|
| mulศime | (val1, val2, โฆ) | Va crea un array cu elementele date, aศa cum s-a menศionat, cum ar fi val1, val2. |
| creaศi_uniune | (etichetฤ, val1, val2, โฆ) | Va crea un tip de uniune cu valoarea la care face referire parametrul tag. |
| Hartฤ | (key1, value1, key2, value2, โฆ) | Va crea o hartฤ cu perechile cheie/valoare menศionate รฎn operanzi. |
| structurฤ_denumitฤ | (nume1, val1, nume2, val2, โฆ) | Va crea o structurฤ cu numele de cรขmpuri ศi valorile menศionate รฎn operanzi. |
| structura | (val1, val2, val3, โฆ) | Creeazฤ o structurฤ cu valorile cรขmpurilor date. Numele cรขmpurilor struct vor fi col1, col2 ศi aศa mai departe. |
Constructorii sunt cel mai adesea utilizaศi รฎntr-o instrucศiune INSERT care populeazฤ o coloanฤ complexฤ sau รฎntr-o instrucศiune SELECT care รฎmpacheteazฤ mai multe coloane scalare รฎntr-o singurฤ structurฤ รฎnainte de a scrie rezultatul รฎntr-un alt tabel.
Funcศii รฎncorporate HiveQL
Operatorii acoperฤ compararea, calculul ศi accesul la elemente, dar nu rotunjesc un numฤr, nu eliminฤ un ศir sau o subcategorie.tracdouฤ date. Aceastฤ lucrare aparศine funcศiilor รฎncorporate ale Hive, care sunt apelate pe nume รฎn interiorul aceloraศi expresii รฎn care apar operatorii. Tabelul de mai jos grupeazฤ familiile pe care un รฎncepฤtor le รฎntรขlneศte mai รฎntรขi.
| Familie de funcศii | Membri tipici | La ce se foloseศte |
|---|---|---|
| Matematic | rotund(), podea(), tavan(), abs(), putere(), sqrt(), rand() | Rotunjire, puteri ศi alte calcule numerice pe o valoare dintr-o singurฤ coloanฤ. |
| ลir | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Curฤศare, tundere ศi refacereping text รฎnainte de a fi comparat sau grupat. |
| Data | data_curentฤ, anul(), luna(), datediff(), adฤugarea_datei(), unix_timestamp() | Extracsepararea pฤrศilor de datฤ ศi mฤsurarea intervalelor dintre douฤ date. |
| Condiลฃional | dacฤ(), CAZ CรND, coalesce(), nvl(), isnull() | Alegerea unei valori la nivel de rรขnd ศi รฎnlocuirea valorii NULL cu o valoare de rezervฤ. |
| Colectie | size(), map_keys(), map_values(), array_contains(), sort_array() | Inspectarea coloanelor array, map ศi struct atinse de operatorii de tip complex. |
| Conversie de tip | cast(), binary() | Forศarea unei coloane รฎn tipul aศteptat de un operator. |
| Agregat (UDAF) | numฤrare(), sumฤ(), medie(), min(), max(), colecศie_set() | Restrรขngerea mai multor rรขnduri รฎntr-o singurฤ valoare, de obicei alฤturi de GROUP BY. |
Lista de funcศii depinde de versiunea Hive, aศa cฤ meritฤ sฤ o citiศi chiar din sesiune, mai degrabฤ decรขt de pe o paginฤ staticฤ. Douฤ instrucศiuni fac acest lucru:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
SHOW FUNCTIONS listeazฤ fiecare nume รฎnregistrat, DESCRIBE FUNCTION afiศeazฤ semnฤtura pe o singurฤ linie, iar forma EXTENDED adaugฤ exemple de utilizare acolo unde clasa de implementare le furnizeazฤ. Cรขnd nicio funcศie รฎncorporatฤ nu se potriveศte, Hive acceptฤ o funcศie definitฤ de utilizator scris in Java.
HiveQL vs SQL: Diferenศe cheie
HiveQL รฎmprumutฤ รฎn mod deliberat sintaxa SQL, iar tabelele de operatori de mai sus vor pฤrea familiare oricui a scris SQL. Modelul de execuศie de mai jos nu este acelaศi, iar diferenศele apar imediat ce o interogare trece dincolo de un simplu SELECT.
| comportament | HiveQL | SQL tradiศional (RDBMS) |
|---|---|---|
| Gestionarea schemelor | Schemฤ la citire โ schema este aplicatฤ atunci cรขnd fiศierul este interogat | Schemฤ la scriere โ schema este impusฤ atunci cรขnd rรขndul este inserat |
| ACTUALIZARE ศi ศTERGERE la nivel de rรขnd | Acceptat doar pe tabele ACID; tabelele gestionate sunt ACID รฎn mod implicit din Hive 3.0 | Acceptat รฎn mod implicit pe fiecare tabel |
| Indexuri | Suportul pentru indexuri a fost eliminat รฎn Hive 3.0 (HIVE-18448); este รฎnlocuit de indexurile la nivel de fiศier ORC sau Parquet ศi de vizualizฤrile materializate. | Arborele B ศi alศi indecศi secundari sunt o caracteristicฤ esenศialฤ |
| Execuศie ศi latenศฤ | Compileazฤ รฎn joburi batch pe Tez, MapReduce sau Spark, deci chiar ศi interogฤrile mici implicฤ costuri de pornire a lucrฤrii | Execuศie interactivฤ, de obicei รฎn milisecunde |
| Scopul de proiectare | Debit pentru fiศiere foarte mari pe HDFS sau un depozit de obiecte | Citiri ศi scrieri cu latenศฤ redusฤ pe un singur server sau cluster |
Consecinศa practicฤ a scrierii expresive este micฤ, dar realฤ. OperaTorii se comportฤ aศa cum era de aศteptat, totuศi un predicat care ar primi rฤspuns dintr-un index dintr-o bazฤ de date relaศionalฤ primeศte rฤspuns รฎn Hive prin scanarea fiศierelor, aศa cฤ filtrarea pe o coloanฤ de partiศie este de obicei mult mai valoroasฤ decรขt reglarea operatorului รฎn sine.
