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.

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.
Din captura de ecran de mai sus, facem două lucruri:
- Crearea bazei de date „guru99” în Hive
- 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.
În captura de ecran de mai sus, facem două lucruri:
- Suntem o picăturăping baza de date „guru99” din Hive
- 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.


