Prikaz košnice i indeksiranje: Izrada s primjerima
⚡ Pametni sažetak
Prikazi u Hiveu su spremljeni upiti koji se ponašaju poput tablica samo za čitanje, dok su indeksi pokazivači na stupac koji ubrzavaju pretraživanje, a oba su stvorena kratkim HiveQL naredbama prikazanim ovdje.

Što je pogled?
Prikazi su slični tablicama i generiraju se na temelju zahtjeva. Prikaz je čisto logički objekt bez vlastite pohrane: Hive čuva samo tekst upita u metastoreu i procjenjuje ga svaki put kada se prikaz referencira.
- Možemo spremiti bilo koji skup rezultata kao prikaz u Hive
- Upotreba je slična prikazima koji se koriste u SQL
- Prikaz je samo za čitanje, stoga ne može biti cilj naredbi LOAD, INSERT ili ALTER koje zapisuju podatke.
Stvaranje pogleda:
Sintaksa:
Create VIEW <VIEWNAME> AS SELECT
Potpuno dokumentirani obrazac također prihvaća klauzulu IF NOT EXISTS i opcionalni popis stupaca, što je korisno kada SELECT popis sadrži izraze umjesto običnih naziva stupaca.
Primjer:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
U ovom primjeru stvaramo prikaz Sample_View koji prikazuje sve vrijednosti redaka s poljem plaće većim od 25000. Filter se nalazi unutar prikaza, tako da svaki upit koji odabire iz Sample_View vidi samo te retke.
Što je Index?
Indeksi su pokazivači na određeni naziv stupca tablice. Cilj indeksa je poboljšati brzinu pretraživanja: bez njega, upit s predikatom kao što je GDJE je tab1.col1 = 10 učitava cijelu tablicu ili particiju i obrađuje svaki redak, dok indeks na col1 omogućuje Hiveu čitanje samo dijela datoteke.
- Korisnik mora ručno definirati indeks
- Gdje god stvaramo indeks, to znači da stvaramo pokazivač na određeni naziv stupca tablice.
- Sve promjene napravljene u stupcu prisutnom u tablici pohranjuju se pomoću indeksne vrijednosti kreirane za naziv stupca.
To ubrzanje nije besplatno. Izrada indeksa zahtijeva dodatnu obradu, a sam indeks zauzima prostor na disku koji se mora održavati uz tablicu.
Sintaksa:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Primjer:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Ovdje stvaramo indeks na tablici guruhive_internaltable za naziv stupca id. Imajte na umu da potpuna izjava na izdanju koje još uvijek podržava indeksiranje također treba klauzulu za rukovanje indeksom, što je u cijelosti prikazano u sljedećem odjeljku.
Razlika između prikaza i indeksa u Hiveu
Prikazi i indeksi se često uvode zajedno jer se nalaze na vrhu postojeće tablice, ali rješavaju različite probleme. Prikaz mijenja ono što upit vidi, dok indeks mijenja brzinu kojom ga Hive pronalazi. Tablica u nastavku ih uspoređuje.
| Aspekt | Pogled | indeks |
|---|---|---|
| Što pohranjuje | Samo SELECT naredba, u metastoreu | Zasebna indeksna tablica koja sadrži pokazivače na podatke |
| Svrha | Pojednostavite ili ograničite ono što upit vraća | Smanjite količinu podataka skeniranih za predikat |
| Cijena diska | nijedan | Dodatni prostor za pohranu plus ponovna izgradnja nakon promjene podataka |
| Pristup za pisanje | Samo za čitanje | Ne postavlja se izravni upit; optimizator ga koristi |
| Trenutni status | Potpuna podrška | Uklonjeno u Hiveu 3.0 |
U praksi se pogled stvara radi čitljivosti i kontrole pristupa, a indeks je stvoren isključivo radi performansi na selektivnom stupcu.
Vrste indeksa u Hiveu sa sintaksom
Izdanja do Hivea 2.x isporučivala su dva rukovatelja indeksima, a rukovatelj je imenovan u obveznoj AS klauzuli. Kompaktno indeksiranje stiglo je u Hiveu 0.7.0, a bitmapno indeksiranje u Hiveu 0.8.0.
- Kompaktni indeks: pohranjuje vrijednost zajedno s adresom HDFS bloka koji je sadrži, umjesto bilježenja lokacije svake pojedine pojave. Odgovara stupcima s mnogo različitih vrijednosti.
- Indeks bitmape: pohranjuje bitmapu po različitoj vrijednosti, što je uobičajeni pristup za stupac s malim brojem različitih vrijednosti, kao što su zastavica statusa ili spola.
Kompaktni indeks se kreira, navodi i briše na sljedeći način:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Opcija WITH DEFERRED REBUILD registrira indeks bez popunjavanja, tako da se izgradnja može zasebno zakazati pomoću ALTER INDEX. Bitmap indeks se stvara na isti način, s drugačijim nazivom rukovatelja:
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;
Indeks se ne osvježava automatski. Kad god osnovna tablica primi nove podatke, naredbu ALTER INDEX … REBUILD treba ponovno pokrenuti, a na particioniranoj tablici ponovna izgradnja može biti ograničena na jednu particiju.
Zašto je indeksiranje uklonjeno u Hiveu 3.0
Indeksiranje je uklonjeno iz Hivea u verziji 3.0 pod HIVE-18448, tako da CREATE INDEX, SHOW INDEX i DROP INDEX više ne postoje na trenutnom klasteru. Značajka se rijetko isplatila zbog troškova ponovne izgradnje nakon što su stupčasta pohrana i optimizator temeljen na troškovima sazreli. Tri zamjene pokrivaju isto područje.
- Materijalizirani prikazi: uveden u Hiveu 3.0.0, a materijalizirani pogled pohranjuje unaprijed izračunati rezultat upita, a optimizator automatski prepisuje dolazne upite na temelju njega.
- Formati kolonskih datoteka: ORC i Parquet imaju vlastite lagane indekse i statistike min/max, tako da čitač može preskočiti cijele pruge, blokove ili datoteke bez ikakvog korisnički definiranog indeksa.
- Pregrade i kante: particioniranje i grupiranje orezivanje podataka na razini direktorija i datoteke, što obično uklanja daleko više ulaznih podataka nego što je to ikada učinio indeks.
Na Hiveu 2.x indeks je i dalje valjan, ali za novi rad je bolje koristiti jednu od gore navedenih opcija.
