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.

  • 🔢 Tipi numerici: I tipi di dati da TINYINT a BIGINT rappresentano numeri interi, mentre DECIMAL (precisione, scala) mantiene valori esatti che FLOAT e DOUBLE non possono gestire.
  • 🔤 Tipi di stringa: STRING non ha limiti dichiarati, VARCHAR accetta da 1 a 65535 caratteri e CHAR ha un limite fisso fino a 255.
  • ???? Data e ora: DATE memorizza un valore semplice nel formato YYYY-MM-DD, mentre TIMESTAMP aggiunge una precisione opzionale al nanosecondo.
  • 🧩 Tipi complessi: ARRAY, MAP, STRUCT e UNIONTYPE raggruppano diversi valori correlati in un'unica colonna anziché in molte.
  • ???? ️ Creare un database: Il comando CREATE DATABASE registra uno spazio dei nomi nel metastore, mentre SHOW DATABASES ne conferma l'esistenza.
  • 🗑️ Trascina un database: DROP DATABASE rimuove lo spazio dei nomi e CASCADE è necessario ogni volta che al suo interno sono ancora presenti delle tabelle.

Tipi di dati di Hive e come creare ed eliminare database in 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.

Shell Hive che crea il database guru99 e elenca i database con show

Come si evince dalla schermata qui sopra, stiamo facendo due cose:

  1. Creazione del database "guru99" in Hive
  2. 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.

Caduta del guscio dell'alveareping il database guru99 e conferma della rimozione con show

Nella schermata qui sopra stiamo facendo due cose:

  1. Siamo una gocciaping database 'guru99' da Hive
  2. 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.

DOMANDE FREQUENTI

No. DATABASE e SCHEMA sono parole chiave intercambiabili in HiveQL, quindi CREATE SCHEMA sales e CREATE DATABASE sales producono lo stesso oggetto metastore. La scelta è puramente una questione di stile aziendale.

Nella directory del data warehouse, normalmente /user/hive/warehouse/database_name.db su HDFS. Una clausola LOCATION nell'istruzione CREATE DATABASE sovrascrive tale percorso e DESCRIBE DATABASE riporta la posizione effettivamente utilizzata.

STRING è la scelta più comune perché non ha limiti dichiarati e non necessita di riempimento. VARCHAR è utile quando è necessario imporre una lunghezza, mentre CHAR è adatto a codici brevi a larghezza fissa come le abbreviazioni dei paesi.

DOUBLE è un tipo di dato binario a virgola mobile, quindi le somme ripetute presentano variazioni di frazioni di centesimo. DECIMAL memorizza valori esatti con una precisione e una scala specificate, garantendo la riproducibilità dei totali finanziari tra diverse esecuzioni.

Un semplice TIMESTAMP non ha fuso orario e viene letto esattamente come è stato scritto. Hive 3.1 ha introdotto TIMESTAMP WITH LOCAL TIME ZONE, che normalizza il valore in UTC in fase di scrittura e lo converte in fase di lettura.

Sì. Una STRUCT può trovarsi all'interno di un ARRAY e un valore MAP può essere esso stesso una STRUCT, quindi ARRAY > è valido in AlveareL'annidamento profondo complica i delimitatori, quindi è meglio mantenerlo superficiale.

Sì. Gli strumenti di profilazione dei dati campionano la cardinalità, la percentuale di valori nulli e gli intervalli di valori, quindi suggeriscono il tipo più ristretto e utilizzabile e un formato di file. Considera il suggerimento come una bozza, perché il modello non può prevedere i carichi di lavoro futuri.

Copilot genera istruzioni CREATE TABLE e CREATE DATABASE a partire da un breve commento, e gli assistenti agenti possono convertire un file di esempio in uno schema. Verificare sempre la scala DECIMAL e le clausole del delimitatore prima di eseguire il risultato.

Riassumi questo post con: