Hive nézet és indexelés: Létrehozás példákkal
⚡ Okos összefoglaló
A Hive nézetek mentett lekérdezések, amelyek írásvédett táblákként viselkednek, míg az indexek egy oszlopra mutató mutatók, amelyek felgyorsítják a kereséseket, és mindkettőt az itt látható rövid HiveQL utasításokkal hozzuk létre.
Mi az a nézet?
A nézetek hasonlóak a táblázatokhoz, és a követelmények alapján generálódnak. A nézet egy tisztán logikai objektum, amely nem rendelkezik saját tárolóhellyel: a Hive csak a lekérdezési szöveget tárolja a metaadattárban, és minden alkalommal kiértékeli, amikor a nézetre hivatkoznak.
- Bármilyen eredményhalmaz adatot elmenthetünk nézetként a Hive-ban
- A használat hasonló a következő nézetekhez: SQL
- Egy nézet csak olvasható, így nem lehet célpontja egy LOAD, INSERT vagy ALTER utasításnak, amely adatokat ír.
Nézet létrehozása:
Syntax:
Create VIEW <VIEWNAME> AS SELECT
A teljes dokumentált űrlap elfogad egy IF NOT EXISTS záradékot és egy opcionális oszloplistát is, ami akkor hasznos, ha a SELECT lista kifejezéseket tartalmaz egyszerű oszlopnevek helyett.
Példa:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Ebben a példában a Sample_View nézetet hozzuk létre, amely az összes olyan sorértéket megjeleníti, amelyben a fizetés mező értéke nagyobb, mint 25000. A szűrő a nézeten belül található, így minden olyan lekérdezés, amely a Sample_View nézetből választ, csak ezeket a sorokat látja.
Mi az Index?
Az indexek egy táblázat adott oszlopnevére mutató mutatók. Az index célja a keresési sebesség javítása: index nélkül egy olyan predikátummal rendelkező lekérdezés, mint például WHERE tab1.col1 = 10 betölti a teljes táblát vagy partíciót, és feldolgozza az összes sort, míg a col1 indexe lehetővé teszi, hogy a Hive csak a fájl egy részét olvassa be.
- A felhasználónak kézzel kell meghatároznia az indexet
- Bárhol is indexet hozunk létre, az azt jelenti, hogy egy mutatót hozunk létre a tábla egy adott oszlopnevére.
- A táblázatban lévő oszlopon végrehajtott módosítások az oszlopnévhez létrehozott indexérték használatával kerülnek tárolásra.
Ez a gyorsítás nem ingyenes. Az index felépítése extra feldolgozási költségekkel jár, és maga az index lemezterületet foglal, amelyet a tábla mellett kell karbantartani.
Syntax:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Példa:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Itt egy indexet hozunk létre a guruhive_internaltable táblában az id oszlopnévhez. Fontos megjegyezni, hogy egy olyan kiadáson futó teljes utasításhoz, amely továbbra is támogatja az indexelést, egy indexkezelő záradékra is szükség van, amelyet a következő szakasz teljes egészében bemutat.
Különbség a nézet és az index között a kaptárban
A nézeteket és az indexeket gyakran együtt vezetik be, mivel mindkettő egy meglévő tábla tetején található, de különböző problémákat oldanak meg. A nézet megváltoztatja, hogy mit lát a lekérdezés, míg az index azt, hogy a Hive milyen gyorsan találja meg azt. Az alábbi táblázat összehasonlítja őket.
| Aspect | Kilátás | index |
|---|---|---|
| Mit tárol | Csak a SELECT utasítás a metaadattárban | Egy külön indextábla, amely az adatokra mutató mutatókat tartalmaz |
| Cél | Lekérdezés visszaadott értékének egyszerűsítése vagy korlátozása | Csökkentse a predikátumhoz beolvasott adatok mennyiségét |
| Lemezköltség | Egyik sem | Extra tárhely, valamint adatváltozás utáni újjáépítés |
| Írási hozzáférés | Csak olvasható | Nincs közvetlenül lekérdezve; az optimalizáló ezt használja. |
| Jelenlegi állapot | Teljes mértékben támogatott | Eltávolítva a Hive 3.0-ban |
A gyakorlatban egy nézetet hoznak létre az olvashatóság és a hozzáférés-vezérlés érdekében, és egy indexet pusztán a szelektív oszlop teljesítménye érdekében.
Indextípusok a Hive-ban szintaxissal
A Hive 2.x-ig terjedő kiadásokban két indexkezelő volt, és a kezelő neve a kötelező AS záradékban szerepel. A kompakt indexelés a Hive 0.7.0-ban, a bitképes indexelés pedig a Hive 0.8.0-ban jelent meg.
- Kompakt index: az értéket a tároló HDFS blokk címével együtt tárolja, ahelyett, hogy minden egyes előfordulás helyét rögzítené. Sok különböző értékű oszlopokhoz illik.
- Bitkép index: egyedi értékenként tárol egy bitképet, ami a szokásos megközelítés egy olyan oszlop esetében, amely csak kevés egyedi értéket tartalmaz, például egy állapot- vagy nemjelzőt.
Egy kompakt index létrehozása, listázása és törlése a következőképpen történik:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
A WITH DEFERRED REBUILD opció feltöltése nélkül regisztrálja az indexet, így a build külön ütemezhető az ALTER INDEX paranccsal. A bitképes index ugyanígy jön létre, csak más kezelőnévvel:
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;
Az index nem frissül automatikusan. Amikor az alaptábla új adatokat kap, az ALTER INDEX … REBUILD parancsot újra kell futtatni, és egy particionált táblán az újraépítés egyetlen partícióra korlátozható.
Miért távolították el az indexelést a Hive 3.0-ban?
Az indexelést a Hive 3.0-s verziójában, a HIVE-18448 alatt eltávolították, így a CREATE INDEX, SHOW INDEX és DROP INDEX funkciók már nem léteznek a jelenlegi klaszteren. A funkció ritkán érte meg az újjáépítési költségét, miután az oszlopos tárolás és a költségalapú optimalizáló kiforrottá vált. Három csere is készült ugyanezzel a témával.
- Materializált nézetek: A Hive 3.0.0-ban bevezetett egy materializált nézet tárolja a lekérdezés előre kiszámított eredményét, és az optimalizáló automatikusan átírja a bejövő lekérdezéseket ennek alapján.
- Oszlopos fájlformátumok: Az ORC és a Parquet saját könnyűsúlyú indexekkel és min/max statisztikákkal rendelkezik, így az olvasó átugorhat teljes csíkokat, blokkokat vagy fájlokat felhasználó által definiált index nélkül.
- Válaszfalak és vödrök: particionálás és vödrözés könyvtár- és fájlszinten metszi az adatokat, ami általában sokkal több bemenetet távolít el, mint egy index valaha is.
A Hive 2.x rendszeren az index továbbra is érvényes, de az új munkákat jobban szolgálja a fenti lehetőségek egyike.

