Che cos'è Hive Query Language? HiveQL OperaTors
⚡ Riepilogo intelligente
Hive Query Language fornisce gli operatori che guidano ogni espressione HiveQL, raggruppandoping Li suddividono in famiglie relazionali, aritmetiche, logiche, di tipo complesso e di costruttori che, insieme, coprono il confronto, il calcolo e l'accesso a dati annidati.

Cos'è Hive Query Language (HiveQL)?
Hive Query Language (HiveQL) è un linguaggio di query in Alveare di Apache Per l'elaborazione e l'analisi di dati strutturati. Separa gli utenti dalla complessità della programmazione MapReduce. Riutilizza concetti comuni dei database relazionali, come tabelle, righe, colonne e schema, per facilitare l'apprendimento. Hive fornisce un'interfaccia a riga di comando (CLI) per la scrittura di query Hive utilizzando il linguaggio di query Hive (HiveQL).
La maggior parte delle interazioni tendono ad avvenire tramite un'interfaccia a riga di comando (CLI). In generale, la sintassi HiveQL è simile a SQL Sintassi con cui la maggior parte degli analisti di dati ha familiarità. I quattro formati di file menzionati nella documentazione originale di Hive sono TEXTFILE, SEQUENCEFILE, ORC e RCFILE (Record Columnar File); le versioni attuali leggono e scrivono anche Parquet e Avro, e ORC è il formato presupposto dalla maggior parte delle guide di ottimizzazione.
Hive utilizza un database Derby incorporato per l'archiviazione dei metadati di un singolo utente. Per le implementazioni multiutente o di metastore condiviso, Hive utilizza MySQL oppure un altro database relazionale esterno, poiché Derby consente una sola sessione alla volta.
HiveQL integrato OperaTors
Hive fornisce operatori integrati per le operazioni sui dati che vengono eseguite sulle tabelle contenute nel data warehouse di Hive.
Questi operatori agiscono sugli operandi all'interno di un'espressione e restituiscono un valore in base alla logica applicata, che si tratti di un confronto, un calcolo o una ricerca in una colonna nidificata.
Di seguito sono elencati i principali tipi di operatori integrati in HiveQL:
- Operatori relazionali
- Operatori aritmetici
- operatori logici
- Operatori su tipi complessi
- Costruttori di tipo complesso
Ciascuna famiglia è trattata in una sezione separata qui di seguito, con la tabella completa degli operatori per quella famiglia.
Relazionale Operators in HiveQL
Utilizziamo operatori relazionali per confrontare le relazioni tra due operandi.
- Operaoperatori come uguale, diverso da, minore di e maggiore di.
- In questi operatori, i tipi degli operandi sono tutti tipi primitivi e gli operatori di corrispondenza di pattern accettano solo stringhe.
Ogni operatore relazionale restituisce un valore BOOLEAN, ed è per questo che questi operatori sono alla base delle clausole WHERE, delle condizioni JOIN e delle istruzioni CASE WHEN. La tabella seguente fornisce dettagli sugli operatori relazionali e sul loro utilizzo in HiveQL:
| Built-in Operator | Descrizione | Operand |
|---|---|---|
| X = Y | VERO se l'espressione X è equivalente all'espressione Y. Altrimenti FALSO. | Richiede tutti i tipi primitivi |
| X!=Y | VERO se l'espressione X non è equivalente all'espressione Y. Altrimenti FALSO. | Richiede tutti i tipi primitivi |
| X<Y | VERO se l'espressione X è minore dell'espressione Y. Altrimenti FALSO. | Richiede tutti i tipi primitivi |
| X <= Y | VERO se l'espressione X è minore o uguale all'espressione Y. Altrimenti FALSO. | Richiede tutti i tipi primitivi |
| X > Y | VERO se l'espressione X è maggiore dell'espressione Y. Altrimenti FALSO. | Richiede tutti i tipi primitivi |
| X >= Y | VERO se l'espressione X è maggiore o uguale all'espressione Y. Altrimenti FALSO. | Richiede tutti i tipi primitivi |
| X È NULLO | VERO se l'espressione X restituisce NULL, altrimenti FALSO. | Ci vogliono tutti i tipi |
| X NON È NULLO | FALSO se l'espressione X restituisce NULL, altrimenti VERO. | Ci vogliono tutti i tipi |
| X COME Y | VERO se la stringa X corrisponde a Y, altrimenti FALSO. | Richiede solo stringhe |
| X R COME Y | NULL se X o Y sono NULL, TRUE se qualsiasi sottostringa di X corrisponde a Java espressione regolare Y, altrimenti FALSE. | Richiede solo stringhe |
| X REGESP Y | Uguale a RLIKE. | Richiede solo stringhe |
Si noti che un confronto con NULL non restituisce mai TRUE o FALSE. Questo è il motivo per cui la tabella elenca IS NULL e IS NOT NULL come operatori separati, anziché aspettarsi che X = NULL funzioni.
Aritmetica HiveQL OperaTors
Utilizziamo gli operatori aritmetici per eseguire operazioni aritmetiche sugli operandi.
- Operazioni aritmetiche come addizione, sottrazionetracLe operazioni di moltiplicazione e divisione tra operandi utilizzano questi operatori.
- In questi operatori, tutti gli operandi sono di tipo numerico.
Esempio:
2 + 3 dà come risultato 5.
In questo esempio, '+' è l'operatore, 2 e 3 sono gli operandi e il valore restituito è 5.
La tabella seguente fornisce dettagli sugli operatori aritmetici nel linguaggio di query Hive:
| Built-in Operator | Descrizione | Operand |
|---|---|---|
| X+Y | Restituirà l'output dell'aggiunta dei valori X e Y. | Richiede tutti i tipi di numeri |
| X-Y | Restituirà l'output di subtracricavare Y dal valore X. | Richiede tutti i tipi di numeri |
| X*Y | Restituirà l'output della moltiplicazione dei valori X e Y. | Richiede tutti i tipi di numeri |
| X/Y | Restituirà l'output della divisione Y da X. | Richiede tutti i tipi di numeri |
| X%Y | Restituirà il resto risultante dalla divisione X per Y. | Richiede tutti i tipi di numeri |
| X e Y | Restituirà l'output dell'AND bit a bit di X e Y. | Richiede tutti i tipi di numeri |
| X| Y | Restituirà l'output dell'OR bit a bit di X e Y. | Richiede tutti i tipi di numeri |
| X^Y | Restituirà l'output dell'XOR bit a bit di X e Y. | Richiede tutti i tipi di numeri |
| ~X | Restituirà l'output del NOT bit a bit di X. | Richiede tutti i tipi di numeri |
Le ultime quattro righe sono operazioni bit a bit anziché aritmetiche ordinarie: operano sulla rappresentazione binaria degli operandi interi, quindi &, | e ^ non sono uguali agli operatori logici AND, OR e NOT trattati nella sezione successiva.
HiveQL Logica OperaTors
Utilizziamo gli operatori logici per eseguire operazioni logiche sugli operandi.
- Le operazioni logiche come AND, OR e NOT tra operandi utilizzano questi operatori.
- In questi operatori, tutti gli operandi sono di tipo BOOLEAN.
La tabella seguente fornisce dettagli sugli operatori logici in HiveQL:
| OperaTors | Descrizione | Operands |
|---|---|---|
| X E Y | VERO se sia X che Y sono VERI, altrimenti FALSO. | Solo tipi booleani |
| X&& Y | È lo stesso di X e Y, ma qui usiamo il simbolo &&. | Solo tipi booleani |
| X O Y | VERO se X o Y o entrambi sono VERI, altrimenti FALSO. | Solo tipi booleani |
| X || Y | È come X o Y, ma qui usiamo il simbolo ||. | Solo tipi booleani |
| NON X | VERO se X è FALSO, altrimenti FALSO. | Solo tipi booleani |
| !X | È lo stesso di NOT X, ma qui usiamo il simbolo !. | Solo tipi booleani |
Poiché gli operatori relazionali restituiscono valori BOOLEANI, gli operatori logici sono ciò che li combina: un predicato come stipendio > 50000 E reparto = 'Vendite' concatena una famiglia nell'altra.
Operatori sui tipi complessi
Gli operatori relazionali, aritmetici e logici operano tutti su singoli valori scalari. Hive memorizza anche colonne di tipo array, map e struct, che richiedono un meccanismo diverso per accedere agli elementi al loro interno. La tabella seguente fornisce dettagli sugli operatori di tipo complesso, che offrono tale meccanismo:
| OperaTors | Operands | Descrizione |
|---|---|---|
| UN] | A è un array e n è un tipo intero | Restituirà l'n-esimo elemento dell'array A. Il primo elemento ha indice 0. |
| M[tasto] | M è una mappa e la chiave è di tipo K | Restituirà il valore corrispondente alla chiave nella mappa. |
Entrambe le forme sono espressioni ordinarie, quindi possono comparire in un elenco SELECT, in una clausola WHERE o in un GROUP BY, e un campo struct viene raggiunto con la notazione a punti, come S.field, invece che con una parentesi.
Costruttori di tipo complesso
Mentre gli operatori sopra descritti leggono una colonna complessa esistente, i costruttori ne creano una. La tabella seguente fornisce dettagli sui costruttori di tipi complessi, che creano istanze dei tipi di dati complessi — Array, Map e Struct — in Hive.
In questa sezione, esamineremo le operazioni eseguite sui costruttori di tipi complessi.
| OperaTors | Operands | Descrizione |
|---|---|---|
| schieramento | (val1, val2, …) | Verrà creato un array con gli elementi specificati, come val1 e val2. |
| create_union | (etichetta, val1, val2, …) | Verrà creato un tipo unione con il valore a cui fa riferimento il parametro del tag. |
| carta geografica | (chiave1, valore1, chiave2, valore2, …) | Verrà creata una mappa con le coppie chiave/valore specificate negli operandi. |
| struttura denominata | (nome1, val1, nome2, val2, …) | Verrà creata una struttura con i nomi dei campi e i valori specificati negli operandi. |
| struct | (val1, val2, val3, …) | Crea una struttura con i valori dei campi specificati. I nomi dei campi della struttura saranno col1, col2 e così via. |
I costruttori vengono utilizzati più spesso in un'istruzione INSERT che popola una colonna complessa, oppure in un'istruzione SELECT che raggruppa diverse colonne scalari in un'unica struttura prima di scrivere il risultato in un'altra tabella.
Funzioni integrate di HiveQL
OperaI tors coprono il confronto, il calcolo e l'accesso agli elementi, ma non arrotondano un numero, non tagliano una stringa o sostituisconotract due date. Quel lavoro appartiene alle funzioni integrate di Hive, che vengono chiamate per nome all'interno delle stesse espressioni in cui compaiono gli operatori. La tabella seguente raggruppa le famiglie che un principiante incontra per prime.
| Famiglia di funzioni | Membri tipici | A cosa serve |
|---|---|---|
| Matematico | round(), floor(), ceil(), abs(), pow(), sqrt(), rand() | Arrotondamento, potenze e altri calcoli numerici su un singolo valore di colonna. |
| Corda | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Pulizia, rifinitura e rimodellamentoping testo prima di essere confrontato o raggruppato. |
| Data | data_corrente, anno(), mese(), differenza_data(), aggiunta_data(), timestamp_unix() | Extracparti di una data e misurazione degli intervalli tra due date. |
| Condizionale | if(), CASE WHEN, coalesce(), nvl(), isnull() | Scegliere un valore a livello di riga e sostituire NULL con un valore di fallback. |
| Collezione | size(), map_keys(), map_values(), array_contains(), sort_array() | Ispezione delle colonne di array, map e struct raggiunte dagli operatori di tipo complesso. |
| Tipo di conversione | cast(), binario() | Forzare una colonna al tipo previsto dall'operatore. |
| Aggregato (UDAF) | count(), sum(), avg(), min(), max(), collect_set() | Raggruppamento di più righe in un unico valore, solitamente in combinazione con GROUP BY. |
L'elenco delle funzioni dipende dalla versione di Hive, quindi è consigliabile leggerlo direttamente dalla sessione piuttosto che da una pagina statica. Due istruzioni permettono di farlo:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
SHOW FUNCTIONS elenca tutti i nomi registrati, DESCRIBE FUNCTION stampa la firma su una riga e la forma EXTENDED aggiunge esempi di utilizzo laddove la classe implementatrice li fornisce. Quando nessuna funzione integrata è adatta, Hive accetta un funzione definita dall'utente scritto in Java.
HiveQL vs SQL: differenze chiave
HiveQL prende in prestito deliberatamente la sintassi SQL, e le tabelle degli operatori sopra riportate risulteranno familiari a chiunque abbia scritto codice SQL. Il modello di esecuzione sottostante, tuttavia, non è lo stesso, e le differenze emergono non appena una query va oltre una semplice SELECT.
| Comportamento | HiveQL | SQL tradizionale (RDBMS) |
|---|---|---|
| Gestione degli schemi | Schema in lettura: lo schema viene applicato quando il file viene interrogato. | Schema on write: lo schema viene applicato al momento dell'inserimento della riga. |
| Aggiornamento e cancellazione a livello di riga | Supportato solo su tabelle ACID; le tabelle gestite sono ACID per impostazione predefinita a partire da Hive 3.0. | Supportato di default su ogni tavolo |
| Indici | Il supporto per gli indici è stato rimosso in Hive 3.0 (HIVE-18448); viene sostituito dagli indici a livello di file ORC o Parquet e dalle viste materializzate. | Gli indici B-tree e altri indici secondari sono una caratteristica fondamentale |
| Esecuzione e latenza | Compila in processi batch su Tez, MapReduce o Spark, quindi anche le query più piccole comportano costi di avvio del lavoro | Esecuzione interattiva, solitamente in millisecondi |
| Obiettivo di progettazione | Velocità di trasmissione su file di grandi dimensioni su HDFS o su un archivio di oggetti | Operazioni di lettura e scrittura a bassa latenza su un singolo server o cluster |
La conseguenza pratica per la scrittura espressiva è piccola ma reale. OperaGli operatori si comportano come previsto, tuttavia un predicato che verrebbe risolto da un indice in un database relazionale viene risolto in Hive tramite la scansione dei file, quindi filtrare su una colonna di partizione è solitamente molto più vantaggioso che ottimizzare l'operatore stesso.
