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.

  • ๐Ÿงฎ Cinci familii de operatori: Operatorii relaศ›ionali, aritmetici, logici, de tip complex ศ™i de constructor acoperฤƒ fiecare expresie de care are nevoie o interogare HiveQL.
  • ๐Ÿ” Comparaศ›ia acceptฤƒ orice primitivฤƒ: Operatorii relaศ›ionali acceptฤƒ toate tipurile primitive, รฎn timp ce LIKE, RLIKE ศ™i REGEXP funcศ›ioneazฤƒ doar pe ศ™iruri de caractere.
  • โž• Aritmetica include lucrul la nivel de bit: Dincolo de cele patru operaศ›ii de bazฤƒ, HiveQL expune operaศ›iuni AND, OR, XOR ศ™i NOT modulo ศ™i bit la bit pe tipuri de numere.
  • ๐Ÿงฉ Datele imbricate au propria sintaxฤƒ: A[n] ajunge la un element de matrice, iar M[key] ajunge la o valoare de hartฤƒ, ambele putรขnd fi utilizate oriunde este permisฤƒ o expresie.
  • ๐Ÿ—๏ธ Constructorii construiesc valori complexe: array(), map(), struct(), named_struct() ศ™i create_union() asambleazฤƒ coloane complexe รฎn interiorul unei interogฤƒri.
  • ๐Ÿ“š Funcศ›iile extind operatorii: Funcศ›iile matematice, de tip ศ™ir de caractere, de tip datฤƒ, condiศ›ionale, de colecศ›ie ศ™i de agregare gestioneazฤƒ activitฤƒศ›i pe care nu le acoperฤƒ niciun operator.

Ce sunt operatorii Hive Query Language (HiveQL)

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.

รŽntrebฤƒri frecvente

Cuvintele cheie, operatorii precum AND sau LIKE ศ™i numele funcศ›iilor nu se rezolvฤƒ la fel, aศ™a cฤƒ SELECT ศ™i select se comportฤƒ la fel. Datele ศ™ir de caractere nu se comportฤƒ la fel: compararea โ€žSalesโ€ cu โ€žsalesโ€ returneazฤƒ FALSE, cu excepศ›ia cazului รฎn care se aplicฤƒ mai รฎntรขi upper() sau lower().

X / Y returneazฤƒ รฎntotdeauna un DOUBLE, chiar ศ™i atunci cรขnd ambii operanzi sunt numere รฎntregi, deci 7 / 2 dฤƒ 3.5 รฎn loc de 3. Folosiศ›i cuvรขntul cheie DIV pentru รฎmpฤƒrศ›irea รฎntre numere รฎntregi ศ™i operatorul % pentru rest.

Operatorii aritmetici ศ™i de comparaศ›ie propagฤƒ NULL: orice expresie care implicฤƒ NULL se evalueazฤƒ ca NULL, nu FALSE. Testaศ›i cu IS NULL sau IS NOT NULL ศ™i รฎnlocuiศ›i o valoare de rezervฤƒ cu coalesce() sau nvl() รฎnainte ca valoarea sฤƒ ajungฤƒ la un operator.

LIKE foloseศ™te caractere wildcard SQL, unde % se potriveศ™te cu orice serie de caractere, iar _ se potriveศ™te cu una. RLIKE se potriveศ™te cu o Java expresie regulatฤƒ pentru orice subศ™ir al valorii. REGEXP este un sinonim pentru RLIKE ศ™i se comportฤƒ identic.

Operatorii aritmetici se leagฤƒ mai รฎntรขi, apoi operatorii de comparaศ›ie, apoi NOT, apoi AND, apoi OR. Deoarece ordinea este uศ™or de interpretat greศ™it รฎn predicatele lungi, se recomandฤƒ utilizarea parantezelor ori de cรขte ori AND ศ™i OR apar รฎn aceeaศ™i clauzฤƒ.

Da. Operatorii relaศ›ionali ศ™i logici formeazฤƒ condiศ›ii de joncศ›iune, operatorii aritmetici pot produce grupuri.ping cheile, iar accesul de tip complex, cum ar fi M[cheie], este valid oriunde este permisฤƒ o expresie, inclusiv listele SELECT, clauzele WHERE ศ™i ORDER BY.

Asistenศ›ii de รฎnvฤƒศ›are automatฤƒ traduc un filtru รฎn limbaj simplu รฎntr-un predicat candidat ศ™i semnaleazฤƒ nepotrivirile de tip, cum ar fi compararea unei coloane de ศ™ir cu un numฤƒr. Confirmaศ›i รฎntotdeauna operatorul generat รฎn raport cu tabelele de mai sus, deoarece dialectele diferฤƒ รฎntre Hive, Spark SQL ศ™i Presto.

Gestioneazฤƒ bine predicatele comune ศ™i sugereazฤƒ modele coalesce() sau CASE WHEN dintr-un comentariu scurt. De asemenea, combinฤƒ sintaxa din alte motoare, aศ™adar verificaศ›i operatorii bit la bit, accesul de tip complex ศ™i orice nume de funcศ›ie cu DESCRIBE FUNCTION รฎnainte de a rula interogarea.

Rezumaศ›i aceastฤƒ postare cu: