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.
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.
- Creazione della tabella guru_sample con due nomi di colonna: "empid" e "empname".
- Visualizzazione delle tabelle presenti nel database guru99
- guru_sample visualizzato sotto le tabelle
- Modifica della tabella “guru_sample” in “guru_sampleNew”
- 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.
Cadereping tabella guru_sampleNew:
Un singolo comando DROP TABLE rimuove la tabella rinominata e Hive risponde con 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
- Per creare la tabella interna
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Caricare i dati nella tabella interna
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Visualizza il contenuto della tabella
Hive>select * from guruhive_internaltable;
- 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.
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
- Crea tabella
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- 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;
- Visualizza il contenuto della tabella
Hive>select * from guruhive_external;
- 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.
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.





