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.

  • 👁️ Pogled je logičan: Pogled pohranjuje samo svoju SELECT naredbu u metastore, tako da ne zauzima vlastiti prostor na disku.
  • 🔒 Samo za čitanje po narudžbi: Pogled ne može biti cilj naredbi LOAD, INSERT ili ALTER, jer ga Hive iznova procjenjuje pri svakom upitu.
  • ???? Indeksne točke na podacima: Indeks je pokazivač na vrijednost stupca koji omogućuje Hiveu čitanje dijela datoteke umjesto cijele tablice.
  • 🗂️ Dva rukovatelja: Kompaktno indeksiranje odgovara stupcima visoke kardinalnosti, a bitmapno indeksiranje stupcima s malo različitih vrijednosti.
  • 🔄 Ručna obnova: Indeks se nikada ne osvježava automatski, stoga se naredba ALTER INDEX REBUILD mora pokrenuti nakon promjene osnovne tablice.
  • ???? Uklonjeno u Hiveu 3.0: Indeksiranje je ukinuto pod HIVE-18448, a zamjenjuju ga materijalizirani prikazi, ORC ili Parquet pohrana i particioniranje.

Prikazi i indeksi u Hiveu objašnjeni s primjerima

Š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.

Pitanja i odgovori

DROP VIEW view_name ga uklanja, a ALTER VIEW view_name RENAME TO new_name ga preimenuje. Budući da pogled ne sadrži podatke, ispustiteping Nikad se ne dira osnovna tablica; nestaje samo unos u metastoreu.

Materijalizirani prikaz pohranjuje unaprijed izračunati rezultat upita kao stvarne podatke, pa zauzima prostor na disku i zahtijeva PONOVNU IZGRADNJU. Normalni prikaz pohranjuje samo tekst upita i ponovno se izračunava pri svakoj referenci.

Ne. Metastore čuva SELECT naredbu i riješeni popis stupaca, ništa više. Svaka referenca ponovno pokreće temeljni upit, zbog čega pogled preko sporog spajanja ostaje spor.

U Hiveu 0.12.0 i ranijim verzijama naziv je bio osjetljiv na velika i mala slova za CREATE INDEX i DROP INDEX, dok je ALTER INDEX zahtijevao mala slova. Hive 0.13.0 je učinio nazive indeksa neosjetljivim na velika i mala slova za svaku naredbu.

Da na bilo kojem modernom klasteru. Obrezivanje particija uklanja cijele direktorije prije početka skeniranja, a grupiranje sužava spajanje ili uzorak na određene datoteke, što obično nadmašuje ono što bi indeksna tablica mogla pružiti.

Alati za strojno učenje profiliraju zapisnike upita, rangiraju predikatne stupce prema selektivnosti i učestalosti te predlažu gdje bi se isplatila materijalizirana shema prikaza ili particije. Validirajte svaki prijedlog u odnosu na EXPLAIN plan prije nego što ga primijenite.

Pouzdano generira naredbe CREATE VIEW iz kratkog komentara. Provjerite sve što je specifično za verziju, jer i dalje emitira sintaksu CREATE INDEX koju klaster Hive 3.0 ili noviji izravno odbacuje.

Indeks je zasebna tablica pokazivača, a Hive ga nikada ne osvježava kada se osnovna tablica promijeni. Bez ponovne izgradnje pokazivači postaju zastarjeli, pa optimizator ili preskače indeks ili vraća zastarjele rezultate.

Sažmite ovu objavu uz: