Creare tabel Hive: Intern, Alterare și Eliminare cu exemple
⚡ Rezumat inteligent
Crearea, modificarea și eliminareaping Tabelele din Apache Hive utilizează DDL în stil SQL familiar, dar rezultatul depinde de faptul dacă tabelul este intern, deținut de Hive, sau extern, care descrie doar fișiere.
Operațiuni asupra tabelelor, cum ar fi crearea, modificarea și eliminareaping Tabelele din Hive pot fi observate în această prezentare generală. Fiecare operație este afișată mai întâi ca o sesiune live, apoi ca o instrucțiune reutilizabilă.
Cum să creezi, să modifici și să elimini un tabel în Hive
În captura de ecran de mai jos, creăm un tabel cu coloane și modificăm numele tabelului.
- Crearea tabelului guru_sample cu două nume de coloană, cum ar fi „empid” și „empname”
- Afișarea tabelelor prezente în baza de date guru99
- guru_sample afișat sub tabele
- Modificarea tabelului „guru_sample” în „guru_sampleNew”
- Din nou, când executați comanda „show”, va afișa noul nume guru_sampleNew
Sesiunea de mai jos parcurge toți cei cinci pași în ordine, la stup promptul, iar cele două apeluri SHOW TABLES dinainte și de după redenumire fac efectul vizibil.
Picăturăping tabel guru_sampleNew:
O singură instrucțiune DROP TABLE elimină tabelul redenumit, iar Hive răspunde cu OK.
Sintaxa și clauzele comune Hive CREATE TABLE
Exemplul de mai sus folosește cea mai scurtă formă posibilă. Instrucțiunea documentată acceptă mai multe clauze opționale, iar fiecare dintre ele decide ceva ce exemplul lasă implicit.
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, ...)];
| Clauză | Ceea ce controlează |
|---|---|
| EXTERN | Creează un tabel extern, astfel încât DROP lasă fișierele de date la locul lor |
| TEMPORAR | Creează un tabel cu scop de sesiune care dispare la sfârșitul sesiunii |
| DACĂ NU EXISTĂ | Suprimă eroarea atunci când există deja un tabel cu acel nume |
| ÎMPĂRȚIT DE | Împarte tabelul într-un director per cheie-valoare |
| GRUPATE DE … ÎN n GĂLEȚE | Hashează rândurile într-un număr fix de fișiere |
| FORMAT RÂND / STOCAT CA | Setează delimitatorul sau SerDe și formatul fișierului, cum ar fi TEXTFILE, ORC sau Parquet |
| LOCAȚIE | Indică tabelul către o anumită cale HDFS în loc de valoarea implicită a depozitului de date |
| TBLPROPERTIES | Atașează perechi cheie-valoare de metadate, inclusiv external.table.purge |
O formă înrudită, CREAȚI TABELUL tabel_nou LIKE tabel_existent, copiază o schemă fără a copia niciun rând. Clauzele structurale precum PARTITIONED BY și CLUSTERED BY sunt prezentate în detaliu în ghidul pentru Partiții și găleți pentru stupi.
Tipuri de tabele și utilizarea acestuia
În ceea ce privește tabelele, este exact ca modul în care creăm în bazele de date relaționale tradiționale. Funcționalități precum filtrarea și joncțiunile pot fi efectuate asupra tabelelor.
Hive gestionează două tipuri de structuri de tabele, tabele interne și tabele externe, în funcție de încărcarea și designul schemei din care este făcută. StupAlegerea nu este cosmetică: ea decide cine deține fișierele de date și ce se întâmplă cu acestea atunci când tabelul este eliminat.
Tabele interne în Hive
- Tabelul intern este strâns cuplat prin natura sa. În acest tip de tabel, mai întâi trebuie să creăm tabelul și să încărcăm datele.
- Putem numi acestea date pe schemă.
- Prin picăturăping acest tabel, atât datele, cât și schema vor fi eliminate.
- Locația stocată a acestui tabel va fi la /user/hive/warehouse.
- Tabelele interne sunt numite și tabele gestionate și numai acestea acceptă tranzacții TRUNCATE, ARCHIVE, MERGE, CONCATENATE și ACID.
Când să alegi masa internă?
- Dacă datele de procesare sunt disponibile în sistemul de fișiere local
- Dacă dorim ca Hive să gestioneze întregul ciclu de viață al datelor, inclusiv ștergerea
Exemplu de fragment de cod pentru tabelul intern
- Pentru a crea tabelul intern
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Încărcați datele în tabelul intern
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Afișați conținutul tabelului
Hive>select * from guruhive_internaltable;
- Pentru a arunca masa internă
Hive>DROP TABLE guruhive_internaltable;
Dacă ați eliminat guruhive_internaltable, inclusiv metadatele și datele sale vor fi șterse din Hive. Dacă nu este specificat PURGE, fișierele sunt mutate în folderul de gunoi HDFS, în loc să fie eliminate imediat.
Din următoarea captură de ecran, putem observa rezultatul tuturor celor patru instrucțiuni într-o singură sesiune, încheindu-se cu eliminarea cu succes.
În codul de mai sus și din captura de ecran facem următoarele lucruri:
- Creați tabelul intern
- Încărcați datele în tabelul intern
- Afișați conținutul tabelului
- Pentru a arunca masa internă
Tabele externe în Hive
- Tabelul extern este slab cuplat prin natura sa. Datele vor fi disponibile în HDFS. Tabelul va fi creat pe baza datelor HDFS.
- Cu alte cuvinte, putem spune că creează o schemă pe date.
- În momentul căderiiping tabelul pe care îl elimină doar schema, datele vor fi în continuare disponibile în HDFS ca înainte.
- Tabelele externe oferă o opțiune de a crea mai multe scheme pentru datele stocate în HDFS în loc să șteargă datele de fiecare dată când schema se actualizează
- Din Hive 4.0.0, setarea proprietății tabelului external.table.purge la true face ca DROP să șteargă și datele.
Când să alegi masa externă?
- Dacă datele de procesare sunt disponibile în HDFS
- Util atunci când fișierele sunt utilizate în afara Hive
Exemplu de fragment de cod pentru tabel extern
- Creați un tabel extern
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Dacă nu specificăm locația în momentul creării tabelului, putem încărca datele manual.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Afișați conținutul tabelului
Hive>select * from guruhive_external;
- Pentru a elimina tabelul extern
Hive>DROP TABLE guruhive_external;
Din următoarea captură de ecran, putem observa rezultatul. Rețineți că eliminarea de la sfârșit elimină doar schema - fișierul de sub calea LOCATION este neatins.
În codul de mai sus, facem următoarele lucruri
- Creați tabelul extern
- Încărcați datele în tabelul extern
- Afișați conținutul tabelului
- Picăturăping masa externa
Diferența dintre tabelele interne și cele externe
| Caracteristică | Intern | Extern |
|---|---|---|
| Schemă | Date despre Schema | Schema pe date |
| Locație de stocare | /utilizator/stup/depozit | Locația HDFS dată de LOCATION |
| Disponibilitatea datelor | În cadrul sistemului de fișiere local | În cadrul HDFS |
| Efectul DROP-ului | Șterge schema și datele | Șterge doar schema, cu excepția cazului în care external.table.purge este true |
| Suport TRUNCATE | Suportat | Nu este suportat |
| Tranzacții cu ACID | Suportat | Nu este suportat |
Documentația Apache Hive Regula este clară: Hive presupune că deține datele pentru tabelele gestionate și presupune că nu le deține pentru cele externe, iar fiecare diferență de mai sus decurge din această singură presupunere.
Referință comenzi ALTER TABLE și DROP TABLE
Capturile de ecran de mai sus arată doar o redenumire și o eliminare. Acestea sunt afirmațiile pe care un practician le folosește cel mai des pentru un tabel existent.
| Declarație | Scop |
|---|---|
| ALTER TABLE nume_tabelă RENAME TO nume_nou; | Redenumește tabelul; pentru un tabel gestionat, aceasta mută și directorul HDFS al acestuia |
| ALTER TABLE nume_tabel ADD COLUMNS (nume_colă tip_date); | Adaugă una sau mai multe coloane la sfârșitul schemei |
| ALTER TABLE nume_tabel CHANGE COLUMN nume_vechi nume_nou tip_date; | Redenumește o coloană sau îi modifică tipul |
| ALTER TABLE nume_tabelă REPLACE COLUMNS (…); | Înlocuiește întreaga listă de coloane cu una nouă |
| ALTER TABLE nume_tabel SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Convertește un tabel gestionat într-unul extern și inversează operațiunea cu FALSE. |
| DROP TABLE [IF EXISTS] nume_tabelă [PURGE]; | Elimină tabelul; PURGE omite folderul coș de gunoi, astfel încât datele nu pot fi recuperate. |
| TRUNCATE [TABLE] nume_tabelă; | Elimină toate rândurile, dar păstrează schema; doar tabelele gestionate |
Două măsuri de siguranță merită integrate în orice script. IF EXISTS împiedică o eliminare (drop) să eșueze pe un tabel care a fost deja eliminat, iar DESCRIBE FORMATTED confirmă dacă ținta este MANAGED_TABLE sau EXTERNAL_TABLE înainte de rularea drop-ului.





