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.

  • 🧱 CREAȚI TABEL: O instrucțiune definește coloanele, formatul rândurilor și, opțional, locația de stocare a unui tabel Hive.
  • 🏷️ ALTER TABLE: RENAME modifică numele tabelului, iar ADD COLUMNS sau CHANGE COLUMN editează schema fără a reîncărca datele.
  • 🗑️ TABEL DE ELIMINARE: Picăturăping un tabel intern șterge atât schema, cât și datele, în timp ce eliminăping un tabel extern elimină doar metadatele.
  • 🔒 Intern este deținut de: Un tabel intern sau gestionat se află în directorul depozitului, iar Hive controlează întregul său ciclu de viață.
  • 🔗 Se face referire la extern: Un tabel extern indică fișiere pe care alte instrumente le citesc, astfel încât acele fișiere supraviețuiesc abandonului.
  • 🔎 Verificați tipul: Rapoartele DESCRIBE FORMATTED sunt MANAGED_TABLE sau EXTERNAL_TABLE, ceea ce elimină orice incertitudine înainte de o eliminare.

Comenzi Hive pentru crearea, modificarea și eliminarea tabelelor cu exemple

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.

  1. Crearea tabelului guru_sample cu două nume de coloană, cum ar fi „empid” și „empname”
  2. Afișarea tabelelor prezente în baza de date guru99
  3. guru_sample afișat sub tabele
  4. Modificarea tabelului „guru_sample” în „guru_sampleNew”
  5. 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.

Sesiune Hive care creează guru_sample și redenumește-l în guru_sampleNew

Picăturăping tabel guru_sampleNew:

O singură instrucțiune DROP TABLE elimină tabelul redenumit, iar Hive răspunde cu OK.

Căderea cojii stupuluiping tabelul guru_sampleNew cu un răspuns 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

  1. Pentru a crea tabelul intern
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Încărcați datele în tabelul intern
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Afișați conținutul tabelului
        Hive>select * from guruhive_internaltable;
  4. 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.

Crearea, încărcarea, interogarea și eliminarea sesiunilor Hiveping guruhive_internaltable

Î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

  1. 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';
  2. 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;
  3. Afișați conținutul tabelului
      Hive>select * from guruhive_external;
  4. 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.

Crearea, încărcarea, interogarea și eliminarea sesiunilor Hiveping guruhive_external

Î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.

Întrebări frecvente

Executați DESCRIBE FORMATTED nume_tabelă. Rândul Tip tabel raportează fie TABEL_GESTIONAT, fie TABEL_EXTERN. Verificarea înainte de o eliminare este cea mai ieftină metodă de a evita ștergerea datelor pe care alte joburi le citesc în continuare.

Da. ALTER TABLE nume_tabel SET TBLPROPERTIES ('EXTERNAL'='TRUE') inversează tipul în metastore, iar FALSE îl inversează. Fișierele de date rămân unde sunt, deci nu este necesară reîncărcarea.

În mod normal nu, doar intrarea din metastore este ștearsă. De la Hive 4.0.0, însă, un tabel extern care are proprietatea external.table.purge setată la true are datele șterse și de DROP, așa că verificați mai întâi proprietățile.

O simplă comandă CREATE TABLE produce acum în mod implicit un tabel ORC tranzacțional gestionat, în loc de un simplu tabel text. Adăugarea cuvântului cheie EXTERNAL este cea care păstrează comportamentul mai vechi, non-ACID, pe un cluster Hive 3.

TRUNCATE elimină fiecare rând, dar păstrează schema și funcționează doar pe tabelele gestionate. DROP elimină și schema. TRUNCATE este alegerea mai sigură atunci când definiția tabelului ar trebui să supraviețuiască unei reîncărcări.

Nu. Hive pliază identificatorii în litere mici în metastore, astfel încât GURU_SAMPLE și guru_sample se referă la același tabel. Valorile șirurilor din interiorul datelor rămân sensibile la majuscule/minuscule, motiv pentru care o comparație WHERE poate totuși să omită rânduri.

Da. Funcțiile de învățare automată din instrumentele de catalog profilează cardinalitatea coloanelor, ratele nule și modelele de interogare, apoi propun tipuri de date, formate de fișiere și chei de partiție. Tratați rezultatul ca o schiță, deoarece modelul nu poate vedea sarcinile de lucru planificate.

Copilot completează instrucțiunile CREATE, ALTER și DROP dintr-un comentariu scurt, iar asistenții agenți pot produce un script de migrare complet. RevVedeți cuvântul cheie EXTERNAL și orice opțiune PURGE, deoarece o estimare greșită acolo șterge datele reale.

Rezumați această postare cu: