Vizualizare Hive și Indexare: Creare cu exemple

⚡ Rezumat inteligent

Vizualizările în Hive sunt interogări salvate care se comportă ca tabele doar în citire, în timp ce indexurile sunt pointeri către o coloană care accelerează căutările, ambele fiind create cu instrucțiuni HiveQL scurte, așa cum se arată aici.

  • 👁️ Viziunea este logică: O vizualizare stochează doar instrucțiunea SELECT în metastore, deci nu ocupă spațiu pe disc propriu.
  • 🔒 Numai citire prin design: O vizualizare nu poate fi ținta comenzilor LOAD, INSERT sau ALTER, deoarece Hive o evaluează în mod corespunzător la fiecare interogare.
  • 📍 Puncte de index la date: Un index este un pointer către valoarea unei coloane care permite Hive să citească o parte a unui fișier în loc de întregul tabel.
  • 🗂️ Doi manipulanți: Indexarea compactă se potrivește coloanelor cu cardinalitate ridicată, iar indexarea bitmap se potrivește coloanelor cu puține valori distincte.
  • 🔄 Reconstrucție manuală: Un index nu este niciodată reîmprospătat automat, așa că ALTER INDEX REBUILD trebuie să ruleze după ce tabelul de bază se modifică.
  • 🚫 Eliminat în Hive 3.0: Indexarea a fost eliminată în conformitate cu HIVE-18448, iar aceasta a fost înlocuită de vizualizări materializate, stocarea ORC sau Parquet și partiționare.

Vizualizări și indexuri în Hive explicate cu exemple

Ce este o vedere?

Vizualizările sunt similare tabelelor și sunt generate pe baza cerințelor. O vizualizare este un obiect pur logic, fără spațiu de stocare propriu: Hive păstrează doar textul interogării în metastore și îl evaluează de fiecare dată când se face referire la vizualizare.

  • Putem salva orice date de set de rezultate ca vizualizare în Hive
  • Utilizarea este similară cu vizualizările utilizate în SQL
  • O vizualizare este doar pentru citire, deci nu poate fi ținta unei instrucțiuni LOAD, INSERT sau ALTER care scrie date.

Crearea vizualizării:

Sintaxă:

Create VIEW <VIEWNAME> AS SELECT

Forma complet documentată acceptă și o clauză IF NOT EXISTS și o listă opțională de coloane, ceea ce este util atunci când lista SELECT conține expresii în loc de nume simple de coloane.

Exemplu:

Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000

În acest exemplu, creăm vizualizarea Sample_View, care afișează toate valorile rândurilor cu un câmp salarial mai mare de 25000. Filtrul se află în vizualizare, astfel încât orice interogare care selectează din Sample_View vede doar acele rânduri.

Ce este Index?

Indexurile sunt pointeri către un anumit nume de coloană dintr-un tabel. Scopul unui index este de a îmbunătăți viteza de căutare: fără unul, o interogare cu un predicat precum UNDE tab1.col1 = 10 încarcă întregul tabel sau partiție și procesează fiecare rând, în timp ce un index pe coloana1 permite Hive să citească doar o parte a fișierului.

  • Utilizatorul trebuie să definească manual indexul
  • Oriunde creăm un index, înseamnă că creăm un pointer către un anumit nume de coloană din tabel.
  • Orice modificări aduse coloanei prezente în tabel sunt stocate folosind valoarea indexului creată pe numele coloanei.

Această accelerare nu este gratuită. Construirea indexului costă procesare suplimentară, iar indexul în sine ocupă spațiu pe disc care trebuie menținut alături de tabel.

Sintaxă:

Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>

Exemplu:

Create INDEX sample_Index ON TABLE guruhive_internaltable(id)

Aici creăm un index pe tabela guruhive_interntalable pentru coloana cu numele id. Rețineți că o instrucțiune completă într-o versiune care încă acceptă indexarea necesită și o clauză de gestionare a indexului, pe care secțiunea următoare o prezintă în întregime.

Diferența dintre vizualizare și index în Hive

Vizualizările și indexurile sunt adesea introduse împreună, deoarece ambele se află deasupra unui tabel existent, dar rezolvă probleme diferite. O vizualizare schimbă ceea ce vede o interogare, în timp ce un index schimbă viteza cu care Hive îl găsește. Tabelul de mai jos le compară.

Aspect Vizualizare index
Ce stochează Numai instrucțiunea SELECT, în metastore Un tabel de index separat care conține pointeri către date
Scop Simplificați sau restricționați ceea ce returnează o interogare Reduceți cantitatea de date scanate pentru un predicat
Costul discului Nici unul Stocare suplimentară plus o reconstrucție după modificările datelor
Acces la scriere Numai în citire Nu este interogat direct; optimizatorul îl folosește
Starea actuală Complet sprijinit Eliminat în Hive 3.0

În practică, o vizualizare este creată pentru lizibilitate și control al accesului, iar un index a fost creat exclusiv pentru performanță pe o coloană selectivă.

Tipuri de index în Hive cu sintaxă

Versiunile până la Hive 2.x au inclus două rutine de tratare a indexurilor, iar rutina este numită în clauza AS obligatorie. Indexarea compactă a apărut în Hive 0.7.0, iar indexarea bitmap în Hive 0.8.0.

  • Index compact: stochează valoarea împreună cu adresa blocului HDFS care o conține, în loc să înregistreze locația fiecărei apariții. Este potrivit pentru coloane cu multe valori distincte.
  • Indexul hărții de biți: stochează un bitmap per valoare distinctă, ceea ce reprezintă abordarea obișnuită pentru o coloană cu doar un număr mic de valori distincte, cum ar fi un indicator de stare sau de sex.

Un index compact este creat, listat și eliminat după cum urmează:

CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT';
SHOW INDEX ON table01;
DROP INDEX table01_index ON table01;

Opțiunea WITH DEFERRED REBUILD înregistrează indexul fără a-l popula, astfel încât construirea poate fi programată separat cu ALTER INDEX. Un index bitmap este creat în același mod, cu un nume de handler diferit:

CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD;
ALTER INDEX table03_index ON table03 REBUILD;
SHOW FORMATTED INDEX ON table03;
DROP INDEX table03_index ON table03;

Un index nu este reîmprospătat automat. Ori de câte ori tabelul de bază primește date noi, trebuie executată din nou comanda ALTER INDEX … REBUILD, iar pe un tabel partiționat, reconstrucția poate fi limitată la o singură partiție.

De ce a fost eliminată indexarea în Hive 3.0

Indexarea a fost eliminată din Hive în versiunea 3.0 sub HIVE-18448, așadar CREATE INDEX, SHOW INDEX și DROP INDEX nu mai există pe un cluster curent. Funcția a meritat rareori costul de reconstrucție odată ce stocarea în coloană și optimizatorul bazat pe costuri au ajuns la maturitate. Trei înlocuiri acoperă același domeniu.

  • Vizualizări materializate: introdus în Hive 3.0.0, un vedere materializată stochează rezultatul precalculat al unei interogări, iar optimizatorul rescrie automat interogările primite în funcție de acesta.
  • Formate de fișiere columnare: ORC și Parquet au propriii indecși ușori și statistici minime/maxime, astfel încât cititorul poate sări peste benzi, blocuri sau fișiere întregi fără niciun index definit de utilizator.
  • Partiții și găleți: partiționare și grupare în grupuri șterge datele la nivel de director și fișier, ceea ce de obicei elimină mult mai multe intrări decât a făcut vreodată un index.

Pe Hive 2.x, un index este încă valid, dar lucrările noi sunt mai bine deservite de una dintre opțiunile de mai sus.

Întrebări frecvente

DROP VIEW nume_vizualizare îl elimină, iar ALTER VIEW nume_vizualizare RENAME TO nume_nou îl redenumește. Deoarece o vizualizare nu conține date, se eliminăping Nu se atinge niciodată tabelul de bază; dispare doar intrarea din metastore.

O vizualizare materializată stochează rezultatul interogării precalculate ca date reale, deci consumă spațiu pe disc și necesită o RECONSTRUCȚIE. O vizualizare normală stochează doar textul interogării și este recalculată pentru fiecare referință.

Nu. Metastore-ul păstrează instrucțiunea SELECT și lista de coloane rezolvate, nimic mai mult. Fiecare referință rulează din nou interogarea subiacentă, motiv pentru care o vizualizare peste o joncțiune lentă rămâne lentă.

În Hive 0.12.0 și versiunile anterioare, numele era sensibil la majuscule/minuscule pentru CREATE INDEX și DROP INDEX, în timp ce ALTER INDEX necesita litere mici. Hive 0.13.0 a făcut ca numele indexurilor să nu fie sensibile la majuscule/minuscule pentru fiecare instrucțiune.

Da, pe orice cluster modern. Eliminarea partițiilor elimină directoare întregi înainte de începerea scanării, iar gruparea restrânge o joncțiune sau un eșantion la fișiere specifice, ceea ce de obicei depășește ceea ce ar putea oferi un tabel de index.

Instrumentele de învățare automată profilează jurnalele de interogări, clasifică coloanele predicatelor după selectivitate și frecvență și sugerează unde o vizualizare materializată sau o schemă de partiționare ar fi avantajoasă. Validați fiecare sugestie în raport cu un plan EXPLAIN înainte de a o aplica.

Produce instrucțiuni CREATE VIEW în mod fiabil dintr-un comentariu scurt. Verificați orice este specific versiunii, deoarece emite în continuare sintaxa CREATE INDEX pe care un cluster Hive 3.0 sau o versiune ulterioară o respinge complet.

Indexul este un tabel separat de pointeri, iar Hive nu îl reîmprospătează niciodată atunci când tabelul de bază se modifică. Fără o reconstrucție, pointerii devin învechiți, așa că optimizatorul fie omite indexul, fie returnează potriviri învechite.

Rezumați această postare cu: