Hive View och indexering: Skapa med exempel
⚡ Smart sammanfattning
Vyer i Hive är sparade frågor som beter sig som skrivskyddade tabeller, medan index är pekare till en kolumn som snabbar upp sökningar, och båda skapas med korta HiveQL-satser som visas här.

Vad är en vy?
Vyer liknar tabeller och genereras baserat på kraven. En vy är ett rent logiskt objekt utan egen lagring: Hive lagrar endast frågetexten i metaarkivet och utvärderar den varje gång vyn refereras.
- Vi kan spara alla resultatuppsättningsdata som en vy i Hive
- Användningen liknar de vyer som används i SQL
- En vy är skrivskyddad, så den kan inte vara mål för en LOAD-, INSERT- eller ALTER-sats som skriver data.
Skapande av vy:
Syntax:
Create VIEW <VIEWNAME> AS SELECT
Det fullständiga dokumenterade formuläret accepterar även en IF NOT EXISTS-klausul och en valfri kolumnlista, vilket är användbart när SELECT-listan innehåller uttryck snarare än vanliga kolumnnamn.
Exempel:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
I det här exemplet skapar vi vyn Sample_View, som visar alla radvärden med ett lönefält större än 25000. Filtret finns inuti vyn, så alla frågor som väljer från Sample_View ser bara dessa rader.
Vad är Index?
Index är pekare till ett visst kolumnnamn i en tabell. Målet med ett index är att förbättra sökhastigheten: utan ett sådant index kan en fråga med ett predikat som DÄR tab1.col1 = 10 laddar hela tabellen eller partitionen och bearbetar varje rad, medan ett index på col1 låter Hive bara läsa en del av filen.
- Användaren måste manuellt definiera indexet
- Var vi än skapar ett index betyder det att vi skapar en pekare till ett visst kolumnnamn i tabellen.
- Alla ändringar som görs i kolumnen i tabellen lagras med hjälp av indexvärdet som skapats för kolumnnamnet.
Den snabbheten är inte gratis. Att bygga indexet kostar extra bearbetning, och själva indexet upptar diskutrymme som måste underhållas bredvid tabellen.
Syntax:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Exempel:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Här skapar vi ett index i tabellen guruhive_internaltable för kolumnnamnet id. Observera att en komplett sats i en utgåva som fortfarande stöder indexering också behöver en index-handler-klausul, vilket nästa avsnitt visar i sin helhet.
Skillnaden mellan vy och index i Hive
Vyer och index introduceras ofta tillsammans eftersom båda finns ovanpå en befintlig tabell, men de löser olika problem. En vy ändrar vad en fråga ser, medan ett index ändrar hur snabbt Hive hittar den. Tabellen nedan jämför dem.
| Aspect | Visa | index |
|---|---|---|
| Vad den lagrar | Endast SELECT-satsen i metaarkivet | En separat indextabell som innehåller pekare till data |
| Syfte | Förenkla eller begränsa vad en fråga returnerar | Minska mängden data som skannas för ett predikat |
| Diskkostnad | Ingen | Extra lagring plus en ombyggnad efter dataändringar |
| Skrivåtkomst | Skrivskyddad | Inte direkt efterfrågad; optimeraren använder den |
| Nuvarande status | Fullt stöd | Borttagen i Hive 3.0 |
I praktiken skapas en vy för läsbarhet och åtkomstkontroll, och ett index skapades enbart för prestanda på en selektiv kolumn.
Typer av index i Hive med syntax
Versioner upp till Hive 2.x levererade två indexhanterare, och hanteraren namnges i den obligatoriska AS-klausulen. Kompakt indexering kom i Hive 0.7.0 och bitmappsindexering i Hive 0.8.0.
- Kompakt index: lagrar värdet tillsammans med adressen till HDFS-blocket som innehåller det, istället för att registrera platsen för varje enskild förekomst. Det passar kolumner med många distinkta värden.
- Bitmappsindex: lagrar en bitmapp per distinkt värde, vilket är den vanliga metoden för en kolumn med endast ett litet antal distinkta värden, till exempel en status- eller könsflagga.
Ett kompakt index skapas, listas och tas bort enligt följande:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Alternativet WITH DEFERRED REBUILD registrerar indexet utan att fylla i det, så att bygget kan schemaläggas separat med ALTER INDEX. Ett bitmappsindex skapas på samma sätt, med ett annat hanterarnamn:
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;
Ett index uppdateras inte automatiskt. När bastabellen tar emot nya data måste ALTER INDEX … REBUILD köras igen, och på en partitionerad tabell kan återuppbyggnaden begränsas till en enda partition.
Varför indexering togs bort i Hive 3.0
Indexering togs bort från Hive i version 3.0 under HIVE-18448, så CREATE INDEX, SHOW INDEX och DROP INDEX finns inte längre i ett befintligt kluster. Funktionen var sällan värd sin ombyggnadskostnad när kolumnlagring och den kostnadsbaserade optimeraren väl hade mognat. Tre ersättningar täcker samma område.
- Materialiserade vyer: introducerad i Hive 3.0.0, en materialiserad vy lagrar det förberäknade resultatet av en fråga och optimeraren skriver om inkommande frågor mot det automatiskt.
- Kolumnära filformat: ORC och Parquet har sina egna lättviktsindex och min/max-statistik, så läsaren kan hoppa över hela ränder, block eller filer utan något användardefinierat index.
- Skiljeväggar och hinkar: partitionering och bucketing rensa data på katalog- och filnivå, vilket vanligtvis tar bort mycket mer indata än ett index någonsin gjorde.
På Hive 2.x är ett index fortfarande giltigt, men nytt arbete tjänas bättre på att använda ett av alternativen ovan.
