Hive View e indicizzazione: creazione con esempi
⚡ Riepilogo intelligente
In Hive, le viste sono query salvate che si comportano come tabelle di sola lettura, mentre gli indici sono puntatori a una colonna che velocizzano le ricerche; entrambi vengono creati con brevi istruzioni HiveQL, come mostrato qui.

Cos'è una vista?
Le viste sono simili alle tabelle e vengono generate in base ai requisiti. Una vista è un oggetto puramente logico senza una propria memoria di archiviazione: Hive conserva nel metastore solo il testo della query e lo valuta ogni volta che si fa riferimento alla vista.
- Possiamo salvare qualsiasi dato del set di risultati come visualizzazione in Hive
- L'utilizzo è simile alle viste utilizzate in SQL
- Una vista è di sola lettura, quindi non può essere la destinazione di un'istruzione LOAD, INSERT o ALTER che scrive dati
Creazione della vista:
Sintassi:
Create VIEW <VIEWNAME> AS SELECT
La versione completa documentata accetta anche una clausola IF NOT EXISTS e un elenco di colonne facoltativo, utile quando l'elenco SELECT contiene espressioni anziché semplici nomi di colonna.
Esempio:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
In questo esempio, creiamo la vista Sample_View, che visualizza tutti i valori di riga con un campo stipendio maggiore di 25000. Il filtro si trova all'interno della vista, quindi qualsiasi query che seleziona da Sample_View visualizzerà solo quelle righe.
Cos'è Indice?
Gli indici sono puntatori al nome di una colonna specifica di una tabella. L'obiettivo di un indice è migliorare la velocità di ricerca: senza di esso, una query con un predicato come DOVE tab1.col1 = 10 carica l'intera tabella o partizione ed elabora ogni riga, mentre un indice sulla colonna 1 consente a Hive di leggere solo una parte del file.
- L'utente deve definire manualmente l'indice
- Ogni volta che creiamo un indice, significa che stiamo creando un puntatore al nome di una colonna specifica della tabella.
- Qualsiasi modifica apportata alla colonna presente nella tabella viene memorizzata utilizzando il valore dell'indice creato sul nome della colonna.
Questo incremento di velocità non è gratuito. La creazione dell'indice richiede un'elaborazione aggiuntiva e l'indice stesso occupa spazio su disco che deve essere gestito insieme alla tabella.
Sintassi:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Esempio:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Qui stiamo creando un indice sulla tabella guruhive_internaltable per la colonna denominata id. Si noti che un'istruzione completa su una release che supporta ancora l'indicizzazione richiede anche una clausola index-handler, che viene mostrata per intero nella sezione successiva.
Differenza tra View e Index in Hive
Viste e indici vengono spesso presentati insieme perché entrambi si basano su una tabella esistente, ma risolvono problemi diversi. Una vista modifica ciò che una query visualizza, mentre un indice modifica la velocità con cui Hive la trova. La tabella seguente li confronta.
| Aspetto | Visualizzare | Indice |
|---|---|---|
| Cosa memorizza | Solo l'istruzione SELECT, nel metastore | Una tabella indice separata contenente puntatori ai dati |
| Missione | Semplifica o limita i risultati di una query | Ridurre la quantità di dati analizzati per un predicato |
| Costo del disco | Nona | Spazio di archiviazione aggiuntivo più ricostruzione dopo le modifiche ai dati |
| Accesso in scrittura | Sola lettura | Non viene interrogato direttamente; l'ottimizzatore lo utilizza |
| Stato attuale | Completamente supportato | Rimosso in Hive 3.0 |
In pratica, una vista viene creata per la leggibilità e il controllo degli accessi, mentre un indice viene creato esclusivamente per ottimizzare le prestazioni su una colonna specifica.
Tipi di indice in Hive con sintassi
Fino alla versione 2.x di Hive, erano disponibili due gestori di indicizzazione, il cui nome è specificato nella clausola AS obbligatoria. L'indicizzazione compatta è stata introdotta in Hive 0.7.0, mentre l'indicizzazione bitmap è stata introdotta in Hive 0.8.0.
- Indice compatto: Memorizza il valore insieme all'indirizzo del blocco HDFS che lo contiene, invece di registrare la posizione di ogni singola occorrenza. È adatto a colonne con molti valori distinti.
- Indice della bitmap: memorizza una bitmap per ogni valore distinto, che è l'approccio usuale per una colonna con solo un piccolo numero di valori distinti, come un flag di stato o di genere.
Un indice compatto viene creato, elencato ed eliminato come segue:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
L'opzione WITH DEFERRED REBUILD registra l'indice senza popolarlo, in modo che la compilazione possa essere pianificata separatamente con ALTER INDEX. Un indice bitmap viene creato allo stesso modo, con un nome di gestore diverso:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
Un indice non viene aggiornato automaticamente. Ogni volta che la tabella di base riceve nuovi dati, è necessario eseguire nuovamente il comando ALTER INDEX … REBUILD e, nel caso di una tabella partizionata, la ricostruzione può essere limitata a una singola partizione.
Perché l'indicizzazione è stata rimossa in Hive 3.0
La funzionalità di indicizzazione è stata rimossa da Hive nella versione 3.0 con il bug HIVE-18448, pertanto i comandi CREATE INDEX, SHOW INDEX e DROP INDEX non sono più presenti nei cluster attuali. La funzionalità raramente giustificava i costi di ricostruzione una volta che l'archiviazione a colonne e l'ottimizzatore basato sui costi si sono consolidati. Tre alternative svolgono la stessa funzione.
- Viste materializzate: introdotto in Hive 3.0.0, un vista materializzata memorizza il risultato precalcolato di una query e l'ottimizzatore riscrive automaticamente le query in arrivo utilizzandolo come riferimento.
- Formati di file a colonne: ORC e Parquet dispongono di indici leggeri e statistiche min/max integrate, consentendo al lettore di saltare intere righe, blocchi o file senza bisogno di un indice definito dall'utente.
- Divisori e secchi: partizionamento e bucketing Elimina i dati a livello di directory e di file, operazione che in genere rimuove molti più dati di quanti ne potesse mai fare un indice.
Su Hive 2.x un indice è ancora valido, ma per i nuovi progetti è preferibile utilizzare una delle opzioni sopra indicate.
