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: