Hive-weergave en indexering: Aan de hand van voorbeelden
⚡ Slimme samenvatting
Views in Hive zijn opgeslagen query's die zich gedragen als alleen-lezen tabellen, terwijl indexen verwijzingen zijn naar een kolom die zoekopdrachten versnellen. Beide worden gemaakt met korte HiveQL-instructies, zoals hieronder weergegeven.
Wat is een weergave?
Views lijken op tabellen en worden gegenereerd op basis van de vereisten. Een view is een puur logisch object zonder eigen opslag: Hive bewaart alleen de querytekst in de metastore en evalueert deze telkens wanneer de view wordt aangeroepen.
- We kunnen alle resultaatsetgegevens opslaan als weergave in Hive
- Het gebruik is vergelijkbaar met de weergaven die worden gebruikt in SQL
- Een view is alleen-lezen, dus deze kan niet het doelwit zijn van een LOAD-, INSERT- of ALTER-instructie die gegevens schrijft.
Weergave creëren:
Syntax:
Create VIEW <VIEWNAME> AS SELECT
De volledig gedocumenteerde vorm accepteert ook een IF NOT EXISTS-clausule en een optionele kolomlijst, wat handig is wanneer de SELECT-lijst expressies bevat in plaats van gewone kolomnamen.
Voorbeeld:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
In dit voorbeeld maken we de weergave Sample_View aan, die alle rijwaarden weergeeft met een salarisveld groter dan 25000. Het filter bevindt zich in de weergave, dus elke query die selecteert uit Sample_View ziet alleen die rijen.
Wat is indexeren?
Indexen zijn verwijzingen naar een specifieke kolomnaam in een tabel. Het doel van een index is het verbeteren van de zoeksnelheid: zonder index zou een query met een predicaat zoals WAAR tab1.col1 = 10 Een index op kolom 1 laadt de hele tabel of partitie en verwerkt elke rij, terwijl een index op kolom 1 Hive slechts een deel van het bestand laat lezen.
- De gebruiker moet de index handmatig definiëren
- Wanneer we een index aanmaken, betekent dit dat we een verwijzing maken naar een specifieke kolomnaam in de tabel.
- Alle wijzigingen die in een kolom in de tabel worden aangebracht, worden opgeslagen met behulp van de indexwaarde die is aangemaakt voor die kolomnaam.
Die snelheidsverbetering is niet gratis. Het opbouwen van de index kost extra verwerkingstijd, en de index zelf neemt schijfruimte in beslag die naast de tabel onderhouden moet worden.
Syntax:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Voorbeeld:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Hier maken we een index aan op de tabel guruhive_internaltable voor de kolomnaam 'id'. Merk op dat een volledige instructie in een release die nog steeds indexering ondersteunt, ook een index-handler-clausule nodig heeft, die in de volgende sectie volledig wordt uitgelegd.
Verschil tussen weergave en index in Hive
Views en indexen worden vaak samen besproken omdat ze beide bovenop een bestaande tabel worden geplaatst, maar ze lossen verschillende problemen op. Een view verandert wat een query ziet, terwijl een index verandert hoe snel Hive de query vindt. De onderstaande tabel vergelijkt ze.
| Aspect | Bekijk | Index |
|---|---|---|
| Wat het opslaat | Alleen de SELECT-instructie in de metastore. | Een aparte indextabel met verwijzingen naar de gegevens. |
| Doel | Vereenvoudig of beperk wat een query retourneert. | Verminder de hoeveelheid gegevens die worden gescand voor een predicaat. |
| Schijfkosten | Geen | Extra opslagruimte plus een herstel na gegevenswijzigingen |
| Schrijftoegang | Alleen-lezen | Niet rechtstreeks opgevraagd; de optimizer gebruikt het. |
| Huidige status | Volledig ondersteund | Verwijderd in Hive 3.0 |
In de praktijk wordt een view gecreëerd voor leesbaarheid en toegangscontrole, terwijl een index puur voor prestatieverbetering op een specifieke kolom wordt aangemaakt.
Indexsoorten in Hive met syntaxis
Versies tot en met Hive 2.x bevatten twee indexhandlers, en de handler wordt genoemd in de verplichte AS-clausule. Compacte indexering werd geïntroduceerd in Hive 0.7.0 en bitmapindexering in Hive 0.8.0.
- Compacte index: Slaat de waarde samen met het adres van het HDFS-blok waarin deze zich bevindt op, in plaats van de locatie van elke afzonderlijke instantie vast te leggen. Dit is geschikt voor kolommen met veel verschillende waarden.
- Bitmapindex: Slaat een bitmap op voor elke unieke waarde, wat de gebruikelijke aanpak is voor een kolom met slechts een klein aantal unieke waarden, zoals een status- of geslachtsvlag.
Een compacte index wordt als volgt aangemaakt, weergegeven en verwijderd:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
De optie WITH DEFERRED REBUILD registreert de index zonder deze te vullen, zodat de build afzonderlijk kan worden gepland met ALTER INDEX. Een bitmapindex wordt op dezelfde manier aangemaakt, maar met een andere handlernaam:
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;
Een index wordt niet automatisch vernieuwd. Telkens wanneer de basistabel nieuwe gegevens ontvangt, moet ALTER INDEX … REBUILD opnieuw worden uitgevoerd. Bij een gepartitioneerde tabel kan de vernieuwing beperkt blijven tot één enkele partitie.
Waarom indexering is verwijderd in Hive 3.0
Indexering is in versie 3.0 van Hive verwijderd onder HIVE-18448, waardoor CREATE INDEX, SHOW INDEX en DROP INDEX niet meer bestaan op een actueel cluster. De functie was de heropbouwkosten zelden meer waard toen kolomopslag en de op kosten gebaseerde optimizer volwassen waren geworden. Drie vervangende functies dekken dezelfde functionaliteit.
- Gerealiseerde weergaven: geïntroduceerd in Hive 3.0.0, een gematerialiseerde weergave Het slaat het vooraf berekende resultaat van een query op, waarna de optimizer inkomende query's automatisch herschrijft op basis daarvan.
- Kolomgeoriënteerde bestandsindelingen: ORC en Parquet hebben hun eigen lichtgewicht indexen en min/max-statistieken, waardoor de lezer hele strips, blokken of bestanden kan overslaan zonder een door de gebruiker gedefinieerde index.
- Partities en buckets: partitionering en bucketing Het opschonen van gegevens op map- en bestandsniveau verwijdert doorgaans veel meer invoer dan een index ooit deed.
In Hive 2.x is een index nog steeds geldig, maar voor nieuw werk is een van de bovenstaande opties beter te gebruiken.

