Hive dispone di molti tipi di dato, sia semplici sia composti, che permettono di attribuire la giusta interpretazione ai campi delle
colonne definite nelle sue tabelle. Una prima classificazione può essere così articolata:
- numeri sia in virgola sia interi per ognuno dei quali è disponibile una varietà di alternative in base al range
da coprire e alla precisione richiesta; - stringhe per ogni informazione alfanumerica;
- data e ora per la gestione delle informazioni temporali;
- booleani per la gestione dei valori logici;
- binari che permettono la manipolazione di byte di dati;
- tipi composti che rappresentano le più comuni strutture dati.
A seguire saranno illustrati alcuni tipi di dato la cui natura richiede qualche spiegazione più dettagliata.
Numeri
La più generica distinzione che si può operare tra tipologie di numeri riguarda l'uso o meno della virgola. Per quanto concerne, i
numeri interi, Hive offre i seguenti tipi di dato:
- TINYINT (1 byte con segno per valori da -128 a 127);
- SMALLINT (2 byte con segno a partire da -32.768 fino a 32.767);
- INT o INTEGER (4 byte con segno per numeri compresi tra -2.147.483.648 e 2.147.483.647);
- BIGINT (8 byte con segno, da -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807).
I numeri con virgola possono invece essere classificati come FLOAT (4 byte a singola precisione),
DOUBLE (8 byte a doppia precisione) e DECIMAL, alias NUMERIC, (immutabili a precisione arbitraria).
Stringhe
Quando si vogliono trattare i dati come caratteri, la scelta verte su un tipo stringa, più generico, o tipologie a caratteri di lunghezza
fissa o variabile. Nel primo caso si utilizza il tipo STRING, che accetta sequenze alfanumeriche racchiuse tra apici singoli ('
) o
doppi ("
), mentre nel secondo si può scegliere tra VARCHAR per il quale viene fissato un numero massimo di caratteri o CHAR
la cui dimensione è fissa in base a come viene definito.
Informazioni temporali
Se abbiamo bisogno di trattare date, si può usare il tipo DATE il cui formato di memorizzazione è di tipo 'YYYY-MM-DD' ossia
composto dall'indicazione dell'anno su quattro cifre, seguito da mese e giorno entrambe su due, usando il trattino come separatore. Il tipo DATE
non prevede l'indicazione del tempo e in virtù del suo formato può memorizzare date comprese tra '0000-01-01' e '9999-12-31'.
Per gestire informazioni temporali più complete si usa TIMESTAMP che include data e ora con la precisione al secondo o opzionalmente
al nanosecondo. Il formato di memorizzazione testuale è "YYYY-MM-DD HH:MM:SS.fffffffff" dove, oltre alla data, vediamo indicate l'ora (H
), i minuti(M
), i
secondi (S
) e, dopo il punto, la porzione opzionale di nanosecondi.
Infine è possibile fare uso del tipo INTERVAL per definire intervalli di tempo. Questa tipologia sfrutta la
parola chiave INTERVAL
seguita da un'informazione numerica e dall'unità di misura dell'intervallo, da scegliere tra SECOND
, MINUTE
, DAY
, MONTH
e YEAR
.
Tipi complessi
In Hive si possono anche strutturare informazioni secondo le principali forme di raccolta di dati: array per gestire le sequenze con memorizzazione della
posizione, mappe per la struttura chiave/valore e struct per l'organizzazione di dati in proprietà distinte dal nome. Un ARRAY è costituito da
elementi omogenei pertanto un campo di tale tipologia richiederà l'indicazione del tipo di dato gestito (es.: array<string>). I valori potranno essere letti dal
formato testuale distinti da un separatore (ad esempio una virgola) che sarà indicato nella struttura della tabella mentre la loro proiezione in output li raccoglie tra una coppia di
parentesi quadre.
Le mappe sfruttano il tipo MAP e richiedono la definizione dei tipi di dato della chiave e del valore (es.: map<string, int>). Questi saranno separati da un
carattere indicato in fase di definizione della tabella. Nell'output in formato testuale una mappa viene racchiusa tra parentesi graffe.
Le struct possono essere pensate sia come delle mappe a chavi prestabilite sia come una sorta di corrispondente del concetto di classe in Programmazione Orientata agli
Oggetti. Si definiscono con STRUCT e impongono di elencare il nome delle proprietà seguito dal tipo di dato che lo contraddistingue (esempio:
struct<indirizzo:string, numero_civico:string, citta:string>).
Tutti questi tipi di dato saranno sperimentati a breve sia in fase di progettazione di tabelle sia nell'uso dei comandi HiveQL.