Tipuri de date Hive: Cum să creați și să aruncați baze de date în Hive

⚡ Rezumat inteligent

Tipurile de date Hive definesc ce poate conține fiecare coloană de tabel, iar comenzile CREATE DATABASE și DROP DATABASE configurează sau elimină spațiul de nume în care se află acele tabele în metastore-ul Hive.

  • 🔢 Tipuri numerice: De la TINYINT la BIGINT se pot acoperi numere întregi, în timp ce DECIMAL(precision, scale) păstrează valori exacte pe care FLOAT și DOUBLE nu le pot face.
  • 🔤 Tipuri de șiruri de caractere: STRING nu are o limită declarată, VARCHAR acceptă de la 1 la 65535 de caractere, iar CHAR este fixat la maximum 255.
  • 📅 Data si ora: DATE stochează o valoare simplă de tip AAAA-LL-ZZ, iar TIMESTAMP adaugă o precizie opțională de nanosecunde.
  • 🧩 Tipuri complexe: ARRAY, MAP, STRUCT și UNIONTYPE împachetează mai multe valori corelate într-o singură coloană în loc de mai multe.
  • 🏗️ Creați o bază de date: CREATE DATABASE înregistrează un spațiu de nume în metastore, iar SHOW DATABASES confirmă existența acestuia.
  • 🗑️ Eliminați o bază de date: DROP DATABASE elimină spațiul de nume, iar CASCADE este necesar ori de câte ori tabelele se află încă în interiorul acestuia.

Tipuri de date Hive și cum se creează și se elimină baze de date în Hive

Tipurile de date sunt elemente foarte importante în limbajul de interogare Hive și în modelarea datelor. Pentru a defini tipurile de coloane din tabel, trebuie să cunoaștem tipurile de date și utilizarea lor.

Următoarele oferă o scurtă prezentare generală a unor tipuri de date prezente în Hive:

  • Tipuri numerice
  • Tipuri de șiruri
  • Tipuri de dată/oră
  • Tipuri complexe

Tipuri de date în Hive

Fiecare coloană Hive este declarată cu unul dintre tipurile de mai jos. Familiile primitive sunt primele, urmate de tipurile complexe care dețin mai mult de o valoare într-o singură coloană.

Tipuri de date numerice Hive

Coloanele numerice variază de la un singur octet la opt octeți, așadar alegerea celui mai mic tip care se potrivește valorilor reduce atât costurile de stocare, cât și cele de scanare.

Tip Alocare de memorie
TINYINT Număr întreg cu semn de 1 octeți (de la -128 la 127)
SMINTINT Număr întreg cu semn de 2 octeți (de la -32,768 la 32,767)
INT Număr întreg cu semn de 4 octeți (de la -2,147,483,648 la 2,147,483,647)
BIGINT Număr întreg cu semn de 8 octeți (de la -9,223,372,036,854,775,808 la 9,223,372,036,854,775,807)
PLUTI Număr cu virgulă mobilă de 4 octeți cu precizie simplă
DUBLA Număr cu virgulă mobilă cu dublă precizie pe 8 octeți
ZECIMAL Putem defini precizia și scala în acest tip, ca DECIMAL(precision, scale). Când sunt omise, Hive folosește DECIMAL(10,0).

Tipuri de date șiruri de stup

Coloanele de caractere au trei forme, iar diferența constă în faptul dacă Hive impune o lungime declarată.

Tip Lungime
REZERVOR Lungime fixă, până la 255 de caractere. Valorile mai scurte sunt completate cu spații.
VARCHAR 1 până la 65,535 de caractere. O valoare mai lungă este trunchiată silențios.
STRING Putem defini lungimea aici (fără limită)

Tipuri de date Hive Data/Ora

Coloanele temporale sunt stocate fără nicio decalaj de fus orar, lucru care merită reținut înainte de a compara valorile scrise de diferite clustere.

Tip Folosire
Marcaj de timp Sprijină tradițional Unix marca temporală cu precizie opțională în nanosecunde
Data Este în formatul AAAA-LL-ZZ.
Intervalul de valori acceptate pentru tipul Dată este de la 0000-01-01 la 9999-12-31, în funcție de suportul oferit de primitivă. Java data tipica

Diverse tipuri de date Hive

Alte două primitive se află în afara familiilor numerice, de șiruri de caractere și de date, dar apar în mod regulat în schemele reale.

Tip Folosire
BOOLEAN Stochează adevărat sau fals
BINAR Stochează o matrice de octeți, ceea ce împiedică conținutul brut să intre într-o coloană STRING

Tipuri de date complexe

Tipurile complexe imbricate valori într-o singură coloană, ceea ce elimină joncțiunea suplimentară de care ar avea nevoie un design relațional.

Tip Folosire
Arrays ARRAY
Nu sunt permise valori negative și expresii neconstante
Harta HARTĂ
Nu sunt permise valori negative și expresii neconstante
Structuri STRUCTURĂ
Uniune TIP DE UNIUNE

Exemplu de tipuri de date complexe Hive

Tabelul de mai sus prezintă forma declarației. Instrucțiunea de mai jos pune trei dintre tipurile complexe într-un singur tabel, astfel încât clauzele delimitatoare și sintaxa de acces pot fi văzute împreună.

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;

Sunt necesari trei delimitatori separați: unul între coloane, un al doilea între elementele unui ARRAY sau STRUCT și un al treilea între o cheie MAP și valoarea sa. Odată ce tabelul există, fiecare coloană complexă este citită cu propriul accesor.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

Tabelul de mai jos prezintă pe scurt ce accesor aparține fiecărui tip.

Tip Cum se citește o valoare
TABEL Index cu bază zero, cum ar fi abilitățile[0]
MAP Căutare cheie între paranteze pătrate, cum ar fi deduceri['tax']
STRUCT Notație cu puncte pe numele câmpului, cum ar fi address.city
TIP DE UNIUNE Rar utilizat, deoarece suportul pentru interogări a rămas incomplet

Tipurile complexe pot fi imbricate, deci ARRAY > este o declarație validă de coloană. Odată ce structura coloanelor este stabilită, tabelele în sine sunt construite cu instrucțiunile acoperite în Crearea, modificarea și eliminarea tabelelor în Hive.

Cum să creați și să aruncați baze de date în Hive

O bază de date în Hive este pur și simplu un spațiu de nume care grupează tabele, deci este primul obiect care trebuie creat înainte de a începe orice lucru cu tabelele. Următorii sunt pașii despre cum să creați și să eliminați baze de date în Hive.

Pasul 1) Creați baza de date în Hive

Pentru a crea o bază de date în Hive shell, trebuie să folosim comanda așa cum se arată în sintaxa de mai jos:

Sintaxă:

Create database <DatabaseName>

Exemplu: Creați baza de date „guru99”

Captura de ecran de mai jos prezintă instrucțiunea create urmată de o comandă show care listează fiecare bază de date din cluster.

Crearea bazei de date guru99 în shell-ul Hive și listarea bazelor de date cu show

Din captura de ecran de mai sus, facem două lucruri:

  1. Crearea bazei de date „guru99” în Hive
  2. Afișarea bazelor de date existente folosind comanda „show”

În același ecran, baza de date „guru99” este afișată la sfârșit când executăm comanda show, ceea ce înseamnă că baza de date „guru99” a fost creată cu succes.

Pasul 2) Plasați baza de date în Hive

Pentru picăturăping o bază de date în shell-ul Hive, trebuie să folosim comanda „drop” așa cum se arată în sintaxa de mai jos:

Sintaxă:

Drop database <DatabaseName>

Exemplu: Eliminare bază de date guru99

În următoarea captură de ecran, instrucțiunea drop rulează prima, iar comanda show care urmează nu mai listează baza de date.

Căderea cojii stupuluiping baza de date guru99 și confirmarea eliminării cu show

În captura de ecran de mai sus, facem două lucruri:

  1. Suntem o picăturăping baza de date „guru99” din Hive
  2. Verificare încrucișată cu comanda „show”

În același ecran, după verificarea bazelor de date cu comanda show, baza de date „guru99” nu apare în Hive. Așadar, putem confirma acum că baza de date „guru99” a fost eliminată.

Comenzi pentru baza de date Hive: USE, DESCRIBE, SHOW și ALTER DATABASE

Cele două afirmații de mai sus folosesc forma lor cea mai scurtă. Sintaxa documentată conține clauze opționale care decid unde ajung fișierele și ce se întâmplă când numele este deja preluat.

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];

Cuvintele cheie DATABASE și SCHEMA sunt interschimbabile, așadar CREATE SCHEMA și CREATE DATABASE fac exact același lucru. Comenzile rămase completează munca zilnică cu un spațiu de nume.

Comandă Ce face
AFIȘAȚI BAZELE DE DATE; Listează fiecare bază de date înregistrată în metastore
USE numele_bază de date; Setează baza de date curentă astfel încât numele tabelelor să nu necesite prefixe
DESCRIE DATABASE nume_bază_de_date; Raportează comentariul, locația HDFS și proprietarul
DESCRIE DATABASE EXTENDED nume_bază_de_date; Adaugă perechile cheie-valoare DBPROPERTIES la acea ieșire
ALTER DATABASE nume_bază_de_date SET DBPROPERTIES (…); Adaugă sau înlocuiește proprietățile metadatelor
ALTER DATABASE nume_bază_de_date SET OWNER USER nume_utilizator; Transferă proprietatea către un alt utilizator sau rol
ALTER DATABASE nume_bază_de_date SET LOCATION cale_hdfs; Modifică calea utilizată de tabelele create ulterior

Două setări implicite merită memorate. Fără o clauză LOCATION, fișierele se află în directorul warehouse, în mod normal /user/hive/warehouse/database_name.db, iar fără IF EXISTS, o eliminare pentru un nume lipsă generează o eroare în loc să fie transmisă discret. Ambele setări sunt păstrate în Hive metastore.

Conversia tipurilor de date Hive și erorile comune

Tipurile nu sunt întotdeauna folosite exact așa cum sunt declarate. Hive lărgește automat o valoare atunci când nu se poate pierde nicio informație și lasă totul în seama unei conversii explicite.

  • Lărgirea implicită urmează lanțul de la TINYINT la SMALLINT la INT la BIGINT la FLOAT la DOUBLE, iar un STRING care conține cifre este promovat la DOUBLE.
  • Restrângerea nu se întâmplă niciodată de la sine, așa că un DOUBLE atribuit unei coloane INT necesită o conversie scrisă.
  • CAST efectuează acea conversie scrisă și returnează NULL în loc de o eroare atunci când valoarea nu poate fi convertită.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Erorile de mai jos explică majoritatea surprizelor pe care începătorii le întâmpină la prima lor schemă.

Simptom Cauză și remediere
Eliminarea eșuează în timp ce baza de date conține încă tabele RESTRICT este valoarea implicită. Adăugați CASCADE pentru a elimina tabelele odată cu aceasta.
Un șir lung ajunge scurtat VARCHAR trunchiază în tăcere dincolo de lungimea declarată. Se folosește STRING când nu se dorește nicio limită.
O coloană se citește ca NULL după o conversie CAST nu a putut analiza valoarea. Verificați datele sursă înainte de a extinde tipul.
Valorile monedelor își pierd banii sau cenții DECIMAL fără argumente înseamnă DECIMAL(10,0). Indicați explicit scara.
Două date care par identice nu se potrivesc niciodată O dată STRING și o coloană DATE sunt de tipuri diferite. Convertiți o parte înainte de a compara.

Odată ce tipurile se comportă corect, următorul pas este încărcarea și interogarea datelor în sine, lucru care este tratat în Interogări Hive cu Ordonare după, Grupare după și Cluster By.

Întrebări frecvente

Nu. DATABASE și SCHEMA sunt cuvinte cheie interschimbabile în HiveQL, deci CREATE SCHEMA sales și CREATE DATABASE sales produc același obiect metastore. Alegerea este pur și simplu o chestiune de stil propriu.

În directorul depozit, în mod normal /user/hive/warehouse/database_name.db pe HDFS. O clauză LOCATION din CREATE DATABASE suprascrie acea cale, iar DESCRIBE DATABASE raportează locația utilizată efectiv.

STRING este alegerea obișnuită deoarece nu are o limită declarată și nu necesită umplere. VARCHAR ajută atunci când trebuie impusă o lungime, iar CHAR se potrivește codurilor scurte cu lățime fixă, cum ar fi abrevierile țărilor.

DOUBLE este un sistem binar cu virgulă mobilă, deci sumele repetate abate cu fracțiuni de cent. DECIMAL stochează valori exacte la o precizie și o scară specificate, ceea ce menține totalurile financiare reproductibile în diferite rulări.

Un TIMESTAMP simplu nu are fus orar și este citit exact așa cum este scris. Hive 3.1 a adăugat TIMESTAMP WITH LOCAL TIME ZONE, care normalizează valoarea la UTC la scriere și o convertește la citire.

Da. O STRUCT poate fi în interiorul unui ARRAY, iar o valoare MAP poate fi ea însăși o STRUCT, deci ARRAY > este valabil în StupImbricarea profundă complică delimitatorii, așa că păstrați-o superficială.

Da. Instrumentele de profilare a datelor eșantionează cardinalitatea, ratele nule și intervalele de valori, apoi sugerează cel mai restrâns tip funcțional și un format de fișier. Tratați sugestia ca pe o schiță, deoarece modelul nu poate vedea sarcinile de lucru viitoare.

Copilot redactează instrucțiunile CREATE TABLE și CREATE DATABASE dintr-un comentariu scurt, iar asistenții agenți pot converti un fișier exemplu într-o schemă. Verificați întotdeauna scala DECIMAL și clauzele delimitatoare înainte de a rula rezultatul.

Rezumați această postare cu: