Creazione di tabelle in Hive: operazioni interne, di modifica e di eliminazione con esempi.

⚡ Riepilogo intelligente

Creare, modificare e rilasciareping Le tabelle in Apache Hive utilizzano il familiare DDL in stile SQL, ma il risultato dipende dal fatto che la tabella sia interna, ovvero di proprietà di Hive, o esterna, che si limita a descrivere i file.

  • 🧱 CREA TABELLA: Un'unica istruzione definisce le colonne, il formato delle righe e, facoltativamente, la posizione di archiviazione di una tabella Hive.
  • 🏷️ MODIFICA TABELLA: RENAME modifica il nome della tabella, mentre ADD COLUMNS o CHANGE COLUMN modificano lo schema senza ricaricare i dati.
  • 🗑️ TABELLA DI RILASCIO: Cadereping una tabella interna elimina sia lo schema che i dati, mentre dropping una tabella esterna rimuove solo i metadati.
  • 🔒 Interno è di proprietà: Una tabella interna o gestita risiede nella directory del data warehouse e Hive ne controlla l'intero ciclo di vita.
  • 🔗 Si fa riferimento a un elemento esterno: Una tabella esterna punta a file letti anche da altri strumenti, in modo che tali file sopravvivano alla cancellazione.
  • 🔎 Verificare il tipo: DESCRIBE FORMATTED segnala MANAGED_TABLE o EXTERNAL_TABLE, eliminando qualsiasi incertezza prima di un'eliminazione.

Comandi Hive per creare, modificare ed eliminare tabelle con esempi

Operazioni sulle tabelle come creazione, modifica ed eliminazioneping In questa guida è possibile osservare le tabelle in Hive. Ogni operazione viene mostrata prima come una sessione live, poi come un'istruzione riutilizzabile.

Come creare, modificare ed eliminare una tabella in Hive

Nello screenshot seguente, stiamo creando una tabella con colonne e modificando il nome della tabella.

  1. Creazione della tabella guru_sample con due nomi di colonna: "empid" e "empname".
  2. Visualizzazione delle tabelle presenti nel database guru99
  3. guru_sample visualizzato sotto le tabelle
  4. Modifica della tabella “guru_sample” in “guru_sampleNew”
  5. Di nuovo, quando esegui il comando "show", verrà visualizzato il nuovo nome guru_sampleNew

La sessione seguente esegue tutti e cinque i passaggi in ordine al alveare> il prompt e le due chiamate SHOW TABLES prima e dopo la ridenominazione rendono visibile l'effetto.

Sessione Hive che crea guru_sample e lo rinomina in guru_sampleNew

Cadereping tabella guru_sampleNew:

Un singolo comando DROP TABLE rimuove la tabella rinominata e Hive risponde con OK.

Caduta del guscio dell'alveareping la tabella guru_sampleNew con una risposta OK

Sintassi e clausole comuni del comando CREATE TABLE in Hive

L'esempio sopra riportato utilizza la forma più breve possibile. L'istruzione documentata accetta diverse clausole opzionali, e ognuna di esse determina un valore che l'esempio lascia al suo valore predefinito.

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type, ...)]
  [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS]
  [ROW FORMAT row_format]
  [STORED AS file_format]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)];
Clausola Cosa controlla
ESTERNO Crea una tabella esterna, quindi DROP lascia i file di dati al loro posto
TEMPORANEO Crea una tabella con ambito di sessione che scompare al termine della sessione.
SE NON ESISTE Sopprime l'errore quando esiste già una tabella con quel nome
DIVISO DA Suddivide la tabella in una directory per ogni valore chiave
RAGGRUPPATI DA … IN n SECCHI Esegue l'hashing delle righe in un numero fisso di file
FORMATO RIGA / MEMORIZZATO COME Imposta il delimitatore o SerDe e il formato del file, ad esempio TEXTFILE, ORC o Parquet.
LOCATION Imposta la tabella su un percorso HDFS specifico anziché sul percorso predefinito del data warehouse.
TBLPROPERTIES Allega coppie chiave-valore di metadati, incluso external.table.purge

Una forma correlata, CREATE TABLE new_table LIKE existing_table, copia uno schema senza copiare alcuna riga. Le clausole strutturali come PARTITIONED BY e CLUSTERED BY sono trattate in dettaglio nella guida a Partizioni e secchi per alveari.

Tipi di tabella e relativo utilizzo

Per quanto riguarda le tabelle, il procedimento è del tutto simile a quello utilizzato nei database relazionali tradizionali. Funzionalità come il filtraggio e le join possono essere eseguite direttamente sulle tabelle.

Hive gestisce due tipi di strutture di tabelle, tabelle interne ed esterne, a seconda del caricamento e della progettazione dello schema in AlveareLa scelta non è puramente estetica: determina a chi appartengono i file di dati e cosa succede loro quando la tabella viene eliminata.

Tabelle interne in Hive

  • Le tabelle interne sono intrinsecamente strettamente accoppiate. In questo tipo di tabella, prima dobbiamo crearla e poi caricare i dati.
  • Possiamo definire questo elemento come dati sullo schema.
  • Per gocciaping Questa tabella, sia i dati che lo schema, verranno rimossi.
  • La posizione memorizzata di questa tabella sarà /user/hive/warehouse.
  • Le tabelle interne sono anche chiamate tabelle gestite e sono le uniche a supportare le transazioni TRUNCATE, ARCHIVE, MERGE, CONCATENATE e ACID.

Quando scegliere il tavolo interno?

  • Se i dati di elaborazione sono disponibili nel file system locale
  • Se vogliamo che Hive gestisca l'intero ciclo di vita dei dati compresa la cancellazione

Snippet di codice di esempio per la tabella interna

  1. Per creare la tabella interna
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Caricare i dati nella tabella interna
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Visualizza il contenuto della tabella
        Hive>select * from guruhive_internaltable;
  4. Per eliminare la tabella interna
        Hive>DROP TABLE guruhive_internaltable;

Se si elimina la tabella guruhive_internaltable, inclusi i metadati e i dati, questa verrà cancellata da Hive. A meno che non venga specificato PURGE, i file vengono spostati nella cartella Cestino di HDFS anziché essere rimossi immediatamente.

Dalla schermata seguente, possiamo osservare l'output di tutte e quattro le istruzioni in un'unica sessione, che si conclude con l'eliminazione avvenuta con successo.

Creazione, caricamento, interrogazione e eliminazione di sessioni Hiveping guruhive_internaltable

Nel codice sopra riportato e dallo screenshot eseguiamo le seguenti operazioni:

  • Creare la tabella interna
  • Caricare i dati nella tabella interna
  • Visualizza il contenuto della tabella
  • Per eliminare la tabella interna

Tabelle esterne in Hive

  • La tabella esterna è di natura debolmente accoppiata. I dati saranno disponibili in HDFS. La tabella verrà creata sui dati HDFS.
  • In altre parole, possiamo dire che si tratta di creare uno schema sui dati.
  • Al momento della cadutaping La tabella viene eliminata solo nello schema, i dati rimarranno comunque disponibili in HDFS come prima.
  • Le tabelle esterne offrono un'opzione per creare più schemi per i dati archiviati in HDFS invece di eliminare i dati ogni volta che lo schema viene aggiornato
  • Dalla versione 4.0.0 di Hive, impostando la proprietà della tabella external.table.purge su true, anche DROP elimina i dati.

Quando scegliere il tavolo esterno?

  • Se i dati di elaborazione sono disponibili in HDFS
  • Utile quando i file vengono utilizzati all'esterno di Hive

Snippet di codice di esempio per la tabella esterna

  1. Crea tabella
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. Se non specifichiamo la posizione al momento della creazione della tabella, possiamo caricare i dati manualmente.
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. Visualizza il contenuto della tabella
      Hive>select * from guruhive_external;
  4. Per eliminare la tabella esterna
      Hive>DROP TABLE guruhive_external;

Dalla schermata seguente, possiamo osservare l'output. Si noti che il comando "drop" alla fine rimuove solo lo schema: il file nel percorso LOCATION rimane invariato.

Creazione, caricamento, interrogazione e eliminazione di sessioni Hiveping guruhive_external

Nel codice sopra riportato, eseguiamo le seguenti operazioni

  • Creare la tabella esterna
  • Carica i dati nella tabella esterna
  • Visualizza il contenuto della tabella
  • Cadereping tabella esterna

Differenza tra tabelle interne e tabelle esterne

Caratteristica Interno Esterno
Schema Dati sullo schema Schema sui dati
Posizione di archiviazione /utente/alveare/magazzino Posizione HDFS fornita da LOCATION
Disponibilità dei dati All'interno del file system locale All'interno di HDFS
Effetto della goccia Elimina schema e dati Elimina solo lo schema, a meno che external.table.purge non sia impostato su true.
Supporto TRUNCATE Supporto Non supportato
Transazioni ACID Supporto Non supportato

Migliori Documentazione di Apache Hive La regola è chiara: Hive presuppone di essere il proprietario dei dati per le tabelle gestite e di non esserlo per quelle esterne, e ogni differenza sopra menzionata deriva da questa singola ipotesi.

Riferimento ai comandi ALTER TABLE e DROP TABLE

Le schermate qui sopra mostrano solo una ridenominazione e un'eliminazione. Queste sono le operazioni a cui un professionista ricorre più spesso su una tabella esistente.

dichiarazione Missione
ALTER TABLE table_name RENAME TO new_name; Rinomina la tabella; per una tabella gestita, questa operazione sposta anche la relativa directory HDFS.
ALTER TABLE table_name ADD COLUMNS (col_name data_type); Aggiunge una o più colonne alla fine dello schema
ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; Rinomina una colonna o ne modifica il tipo
ALTER TABLE table_name REPLACE COLUMNS (…); Sostituisce l'intero elenco di colonne con uno nuovo
ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); Converte una tabella gestita in una tabella esterna, e FALSE la annulla.
DROP TABLE [IF EXISTS] table_name [PURGE]; Rimuove la tabella; PURGE ignora la cartella del cestino, quindi i dati non possono essere recuperati.
TRUNCATE [TABLE] nome_tabella; Rimuove tutte le righe ma mantiene lo schema; solo tabelle gestite

Due misure di sicurezza sono opportune da includere in qualsiasi script. IF EXISTS impedisce che l'eliminazione fallisca su una tabella già rimossa, mentre DESCRIBE FORMATTED conferma se la destinazione è MANAGED_TABLE o EXTERNAL_TABLE prima dell'esecuzione dell'eliminazione.

DOMANDE FREQUENTI

Eseguire DESCRIBE FORMATTED table_name. La riga Tipo di tabella riporta MANAGED_TABLE o EXTERNAL_TABLE. Verificare prima di eliminare i dati è il modo più economico per evitare di cancellare dati che altri processi devono ancora leggere.

Sì. ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') inverte il tipo nel metastore, mentre FALSE lo riporta al tipo originale. I file di dati rimangono nella posizione in cui si trovano, quindi non è necessario ricaricarli.

Normalmente no, viene eliminata solo la voce del metastore. Tuttavia, a partire da Hive 4.0.0, anche i dati di una tabella esterna con la proprietà external.table.purge impostata su true vengono eliminati tramite DROP, quindi è consigliabile controllare prima le proprietà.

Ora, un semplice comando CREATE TABLE produce per impostazione predefinita una tabella ORC transazionale gestita anziché una semplice tabella di testo. L'aggiunta della parola chiave EXTERNAL è ciò che mantiene il comportamento precedente, non conforme alle norme ACID, su un cluster Hive 3.

TRUNCATE rimuove tutte le righe ma mantiene lo schema e funziona solo sulle tabelle gestite. DROP rimuove anche lo schema. TRUNCATE è la scelta più sicura quando la definizione della tabella deve rimanere invariata dopo un ricaricamento.

No. Hive converte gli identificatori in minuscolo nel metastore, quindi GURU_SAMPLE e guru_sample si riferiscono alla stessa tabella. I valori stringa all'interno dei dati mantengono la distinzione tra maiuscole e minuscole, motivo per cui un confronto WHERE può comunque non trovare alcune righe.

Sì. Le funzionalità di apprendimento automatico degli strumenti di catalogo analizzano la cardinalità delle colonne, la frequenza dei valori nulli e i modelli di query, quindi propongono tipi di dati, formati di file e chiavi di partizione. Considera l'output come una bozza, perché il modello non può visualizzare i carichi di lavoro pianificati.

Copilot completa le istruzioni CREATE, ALTER e DROP a partire da un breve commento, e gli assistenti agentici possono generare un intero script di migrazione. RevControlla la parola chiave EXTERNAL e qualsiasi opzione PURGE, perché un'ipotesi errata in questi casi può eliminare dati reali.

Riassumi questo post con: