Tipi di dati Hive: come creare ed eliminare database in Hive
⚡ Riepilogo intelligente
I tipi di dati di Hive definiscono cosa può contenere ogni colonna di una tabella, e i comandi CREATE DATABASE e DROP DATABASE configurano o rimuovono lo spazio dei nomi in cui risiedono tali tabelle all'interno del metastore di Hive.

I tipi di dati sono elementi molto importanti nel linguaggio di query Hive e nella modellazione dei dati. Per definire i tipi di colonna di una tabella, è necessario conoscere i tipi di dati e il loro utilizzo.
Di seguito viene fornita una breve panoramica di alcuni tipi di dati presenti in Hive:
- Tipi numerici
- Tipi di stringa
- Tipi di data/ora
- Tipi complessi
Tipi di dati in Hive
Ogni colonna di Hive è dichiarata con uno dei tipi elencati di seguito. Vengono prima le famiglie primitive, seguite dai tipi complessi che possono contenere più di un valore in una singola colonna.
Tipi di dati numerici Hive
Le colonne numeriche possono variare da un singolo byte a otto byte, quindi scegliere il tipo più piccolo che si adatti ai valori consente di ridurre sia lo spazio di archiviazione che i costi di scansione.
| Tipo | Allocazione della memoria |
|---|---|
| PICCOLO | Intero con segno a 1 byte (da -128 a 127) |
| PICCOLO | Intero con segno a 2 byte (da -32,768 a 32,767) |
| INT | Intero con segno a 4 byte (da -2,147,483,648 a 2,147,483,647) |
| GRANDE | Intero con segno a 8 byte (da -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807) |
| FLOAT | Numero in virgola mobile a precisione singola a 4 byte |
| RADDOPPIARE | Numero in virgola mobile a doppia precisione a 8 byte |
| DECIMALE | Possiamo definire precisione e scala in questo tipo, come DECIMAL(precisione, scala). Quando vengono omesse, Hive usa DECIMAL(10,0). |
Tipi di dati stringa Hive
Le colonne di caratteri sono disponibili in tre forme, e la differenza sta nel fatto che Hive imponga o meno una lunghezza dichiarata.
| Tipo | Lunghezza |
|---|---|
| CHAR | Lunghezza fissa, fino a 255 caratteri. I valori più corti vengono riempiti con spazi. |
| VARCHAR | Da 1 a 65,535 caratteri. Un valore più lungo viene troncato silenziosamente. |
| STRING | Qui possiamo definire la lunghezza (senza limiti). |
Tipi di dati data/ora Hive
Le colonne temporali vengono memorizzate senza alcun offset di fuso orario, un aspetto da tenere presente prima di confrontare i valori scritti da cluster diversi.
| Tipo | Impiego |
|---|---|
| Timestamp | Supporta tradizionale Unix timestamp con precisione opzionale al nanosecondo |
| Data | È nel formato AAAA-MM-GG. L'intervallo di valori supportati per il tipo Data va da 0000-01-01 a 9999-12-31, a seconda del supporto del primitivo Java data tipica |
Tipi di dati vari di Hive
Altri due tipi primitivi si trovano al di fuori delle famiglie numerica, stringa e data, ma compaiono regolarmente negli schemi reali.
| Tipo | Impiego |
|---|---|
| BOOLEAN | Storie vere o false |
| BINARIO | Memorizza un array di byte, che impedisce l'inserimento di contenuto grezzo in una colonna STRINGA |
Tipi di dati complessi di Hive
I tipi complessi annidano i valori all'interno di un'unica colonna, eliminando così l'ulteriore join che sarebbe necessaria in una struttura relazionale.
| Tipo | Impiego |
|---|---|
| Array | VETTORE Valori negativi ed espressioni non costanti non sono consentiti |
| Maps | CARTA GEOGRAFICA Valori negativi ed espressioni non costanti non sono consentiti |
| Strutture | STRUTTURA |
| Unione | TIPO UNIONE |
Esempio di tipi di dati complessi in Hive
La tabella sopra riporta la forma di dichiarazione. L'istruzione seguente raggruppa tre dei tipi complessi in un'unica tabella, in modo da poter visualizzare insieme le clausole delimitatrici e la sintassi di accesso.
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
Sono necessari tre delimitatori distinti: uno tra le colonne, un secondo tra gli elementi di un ARRAY o di una STRUCT e un terzo tra una chiave MAP e il suo valore. Una volta creata la tabella, ogni colonna complessa viene letta con il proprio metodo di accesso.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
La tabella seguente riassume a quale tipo appartiene ciascun accessor.
| Tipo | Come viene letto un valore |
|---|---|
| ARRAY | Indice basato su zero, come skills[0] |
| MAP | Ricerca chiave tra parentesi quadre, come detrazioni['tasse'] |
| STRUTTURA | Notazione con punti nel nome del campo, ad esempio address.city. |
| TIPO UNIONE | Utilizzato raramente, perché il supporto per le query è rimasto incompleto |
I tipi complessi possono essere annidati, quindi ARRAY > è una dichiarazione di colonna valida. Una volta definito il layout delle colonne, le tabelle stesse vengono costruite con le istruzioni trattate in Creazione, modifica ed eliminazione di tabelle in Hive.
Come creare ed eliminare database in Hive
In Hive, un database è semplicemente uno spazio dei nomi che raggruppa le tabelle, quindi è il primo oggetto da creare prima di iniziare a lavorare con le tabelle. Di seguito sono riportati i passaggi per creare ed eliminare database in Hive.
Passaggio 1) Creare il database in Hive
Per creare un database nella shell di Hive, dobbiamo utilizzare il comando come mostrato nella sintassi seguente:
Sintassi:
Create database <DatabaseName>
Esempio: crea il database “guru99”
Lo screenshot qui sotto mostra l'istruzione CREATE seguita da un comando SHOW che elenca tutti i database presenti nel cluster.
Come si evince dalla schermata qui sopra, stiamo facendo due cose:
- Creazione del database "guru99" in Hive
- Visualizzazione dei database esistenti tramite il comando "show".
Nella stessa schermata, quando eseguiamo il comando show, viene visualizzato in fondo il database "guru99", il che significa che il database "guru99" è stato creato correttamente.
Passaggio 2) Trascinare il database in Hive
Per la cadutaping Per eliminare un database nella shell di Hive, dobbiamo usare il comando "drop" come mostrato nella sintassi seguente:
Sintassi:
Drop database <DatabaseName>
Esempio: Elimina il database guru99
Nella schermata successiva, l'istruzione drop viene eseguita per prima e il comando show che segue non elenca più il database.
Nella schermata qui sopra stiamo facendo due cose:
- Siamo una gocciaping database 'guru99' da Hive
- Verifica incrociata con il comando “show”
Nella stessa schermata, dopo aver controllato i database con il comando show, il database "guru99" non compare in Hive. Possiamo quindi confermare che il database "guru99" è stato eliminato.
Comandi del database Hive: USE, DESCRIBE, SHOW e ALTER DATABASE
Le due istruzioni precedenti utilizzano la loro forma più breve. La sintassi documentata include clausole opzionali che determinano la posizione dei file e cosa accade se il nome è già in uso.
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
Le parole chiave DATABASE e SCHEMA sono intercambiabili, quindi CREATE SCHEMA e CREATE DATABASE svolgono esattamente la stessa funzione. I comandi rimanenti completano le operazioni quotidiane con un namespace.
| Comando | Ciò che fa |
|---|---|
| MOSTRA BANCHE DATI; | Elenca tutti i database registrati nel metastore |
| USA nome_database; | Imposta il database corrente in modo che i nomi delle tabelle non necessitino di prefisso |
| DESCRIVI IL DATABASE nome_database; | Segnala il commento, la posizione HDFS e il proprietario |
| DESCRIVI IL DATABASE ESTESO nome_database; | Aggiunge le coppie chiave-valore DBPROPERTIES a quell'output |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | Aggiunge o sostituisce le proprietà dei metadati |
| ALTER DATABASE nome_database SET OWNER USER nome_utente; | Trasferisce la proprietà a un altro utente o ruolo |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | Modifica il percorso utilizzato dalle tabelle create da quel momento in poi |
Due impostazioni predefinite sono importanti da ricordare. Senza una clausola LOCATION i file si trovano nella directory del data warehouse, normalmente /user/hive/warehouse/database_name.db, e senza IF EXISTS un drop in corrispondenza di un nome mancante genera un errore invece di passare silenziosamente. Entrambe le impostazioni sono contenute nel Metastore di Hive.
Conversione dei tipi di dati Hive ed errori comuni
I tipi non vengono sempre utilizzati esattamente come dichiarati. Hive espande automaticamente un valore quando non vi è alcuna perdita di informazioni e lascia tutto il resto a una conversione esplicita.
- L'allargamento implicito segue la catena TINYINT a SMALLINT a INT a BIGINT a FLOAT a DOUBLE, e una STRINGA che contiene cifre viene promossa a DOUBLE.
- Il restringimento non avviene mai automaticamente, quindi un DOUBLE assegnato a una colonna INT richiede una conversione scritta.
- CAST esegue la conversione in scrittura e restituisce NULL anziché un errore quando il valore non può essere convertito.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Gli errori elencati di seguito rappresentano la maggior parte delle sorprese che i principianti incontrano al loro primo schema.
| Sintomo | Causa e soluzione |
|---|---|
| L'eliminazione fallisce mentre il database contiene ancora tabelle | RESTRICT è l'impostazione predefinita. Aggiungi CASCADE per eliminare le tabelle con esso |
| Una lunga stringa arriva accorciata | VARCHAR tronca silenziosamente i dati oltre la lunghezza dichiarata. Utilizzare STRING quando non si desidera alcun limite. |
| Una colonna risulta NULL dopo una conversione | CAST non è riuscito ad analizzare il valore. Controllare i dati di origine prima di estendere il tipo |
| Il valore delle valute perde i suoi paise o centesimi | DECIMAL senza argomenti significa DECIMAL(10,0). Specifica esplicitamente la scala |
| Due date dall'aspetto identico non coincidono mai | Una data STRINGA e una colonna DATE sono di tipi diversi. Converti un lato prima di confrontare |
Una volta che i tipi si comportano correttamente, il passo successivo è caricare e interrogare i dati stessi, che è trattato in Query Hive con Order By, Group By e Cluster By.


