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.

