Zobrazení a indexování podregistru: Vytvoření s příklady
⚡ Chytré shrnutí
Pohledy v Hive jsou uložené dotazy, které se chovají jako tabulky jen pro čtení, zatímco indexy jsou ukazatele na sloupec, které urychlují vyhledávání, a obojí se vytváří pomocí krátkých příkazů HiveQL, které jsou zde uvedeny.

Co je pohled?
Pohledy (Views) jsou podobné tabulkám a generují se na základě požadavků. Pohled je čistě logický objekt bez vlastního úložiště: Hive uchovává v metaúložišti pouze text dotazu a vyhodnocuje ho při každém odkazu na pohled.
- Jakákoli data sady výsledků můžeme uložit jako zobrazení v Hive
- Použití je podobné jako u zobrazení použitých v SQL
- Pohled je určen pouze pro čtení, takže nemůže být cílem příkazů LOAD, INSERT nebo ALTER, které zapisují data.
Vytvoření pohledu:
Syntaxe:
Create VIEW <VIEWNAME> AS SELECT
Plně zdokumentovaný formulář také akceptuje klauzuli IF NOT EXISTS a volitelný seznam sloupců, což je užitečné, když seznam SELECT obsahuje výrazy místo prostých názvů sloupců.
Příklad:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
V tomto příkladu vytváříme zobrazení Sample_View, které zobrazuje všechny hodnoty řádků s polem platu větším než 25000. Filtr se nachází uvnitř zobrazení, takže jakýkoli dotaz, který vybírá ze Sample_View, vidí pouze tyto řádky.
Co je index?
Indexy jsou ukazatele na konkrétní název sloupce tabulky. Cílem indexu je zvýšit rychlost vyhledávání: bez něj by dotaz s predikátem, jako je KDE tab1.col1 = 10 načte celou tabulku nebo oddíl a zpracuje každý řádek, zatímco index na sloupci col1 umožňuje Hive číst pouze část souboru.
- Uživatel musí ručně definovat index
- Kdekoli vytváříme index, znamená to, že vytváříme ukazatel na konkrétní název sloupce tabulky.
- Veškeré změny provedené ve sloupci v tabulce se ukládají s použitím indexové hodnoty vytvořené pro název sloupce.
Toto zrychlení není zadarmo. Vytvoření indexu vyžaduje dodatečné zpracování a samotný index zabírá místo na disku, které je nutné udržovat vedle tabulky.
Syntaxe:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Příklad:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Zde vytváříme index v tabulce guruhive_internaltable pro sloupec s názvem id. Všimněte si, že kompletní příkaz ve verzi, která stále podporuje indexování, také potřebuje klauzuli pro obsluhu indexu, kterou v plném znění ukážeme v následující části.
Rozdíl mezi zobrazením a indexem v Hive
Pohledy a indexy se často zavádějí společně, protože oba se nacházejí nad existující tabulkou, ale řeší různé problémy. Pohled mění, co dotaz vidí, zatímco index mění, jak rychle ho Hive najde. Níže uvedená tabulka je porovnává.
| Vzhled | Zobrazit | index |
|---|---|---|
| Co ukládá | Pouze příkaz SELECT v metastore | Samostatná indexová tabulka obsahující ukazatele na data |
| Účel | Zjednodušení nebo omezení výsledků dotazu | Snížení množství dat skenovaných pro predikát |
| Cena disku | Nevyplněno | Extra úložný prostor a obnova po změnách dat |
| Přístup k zápisu | Jen pro čtení | Není dotazován přímo; optimalizátor jej používá |
| Aktuální stav | Plně podporováno | Odstraněno v Hive 3.0 |
V praxi se zobrazení vytváří pro čitelnost a řízení přístupu a index se vytváří čistě pro výkon na selektivním sloupci.
Typy indexů v Hive se syntaxí
Verze Hive až do verze 2.x obsahovaly dva obslužné rutiny indexů a každá z nich je pojmenována v povinné klauzuli AS. Kompaktní indexování se objevilo v Hive 0.7.0 a bitmapové indexování v Hive 0.8.0.
- Kompaktní index: ukládá hodnotu spolu s adresou bloku HDFS, který ji obsahuje, namísto zaznamenávání umístění každého jednotlivého výskytu. To je vhodné pro sloupce s mnoha odlišnými hodnotami.
- Index bitmapy: ukládá bitmapu pro každou jedinečnou hodnotu, což je obvyklý přístup pro sloupec s pouze malým počtem jedinečných hodnot, jako je například stav nebo příznak pohlaví.
Kompaktní index se vytvoří, zobrazí a odstraní takto:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Volba WITH DEFERRED REBUILD zaregistruje index bez jeho naplnění, takže sestavení lze naplánovat samostatně pomocí ALTER INDEX. Bitmapový index se vytváří stejným způsobem, ale s jiným názvem obslužné rutiny:
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;
Index se neobnovuje automaticky. Kdykoli základní tabulka obdrží nová data, je nutné znovu spustit příkaz ALTER INDEX … REBUILD a u rozdělené tabulky může být obnova omezena na jeden oddíl.
Proč bylo indexování v Hive 3.0 odstraněno
Indexování bylo z Hive odstraněno ve verzi 3.0 pod HIVE-18448, takže funkce CREATE INDEX, SHOW INDEX a DROP INDEX již v aktuálním clusteru neexistují. Jakmile sloupcové úložiště a optimalizátor založený na nákladech dozrály, náklady na tuto funkci se zřídka vyplatily. Stejnou problematiku pokrývají tři náhrady.
- Materializované pohledy: představený v Hive 3.0.0, zhmotněný pohled ukládá předem vypočítaný výsledek dotazu a optimalizátor na něj automaticky přepisuje příchozí dotazy.
- Sloupcové formáty souborů: ORC a Parquet mají vlastní lehké indexy a statistiky min/max, takže čtečka může přeskočit celé pruhy, bloky nebo soubory bez uživatelem definovaného indexu.
- Příčky a kbelíky: dělení a bucketing prořezávat data na úrovni adresářů a souborů, což obvykle odstraňuje mnohem více vstupních dat než index.
Na Hive 2.x je index stále platný, ale pro novou práci je lepší použít jednu z výše uvedených možností.
