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.

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.
