Hive-Ansicht und -Indexierung: Erstellen mit Beispielen
⚡ Intelligente Zusammenfassung
Views in Hive sind gespeicherte Abfragen, die sich wie schreibgeschützte Tabellen verhalten, während Indizes Zeiger auf eine Spalte sind, die die Suchvorgänge beschleunigen. Beide werden mit kurzen HiveQL-Anweisungen erstellt, die hier gezeigt werden.

Was ist eine Ansicht?
Views ähneln Tabellen und werden bedarfsorientiert generiert. Eine View ist ein rein logisches Objekt ohne eigenen Speicher: Hive speichert lediglich den Abfragetext im Metastore und wertet ihn bei jedem Zugriff auf die View aus.
- Wir können alle Ergebnissatzdaten als Ansicht in Hive speichern
- Die Verwendung ähnelt den Ansichten, die in verwendet werden SQL
- Eine Ansicht ist schreibgeschützt und kann daher nicht Ziel einer LOAD-, INSERT- oder ALTER-Anweisung sein, die Daten schreibt.
Ansicht erstellen:
Syntax:
Create VIEW <VIEWNAME> AS SELECT
Die vollständig dokumentierte Form akzeptiert auch eine IF NOT EXISTS-Klausel und eine optionale Spaltenliste, was nützlich ist, wenn die SELECT-Liste Ausdrücke anstelle von einfachen Spaltennamen enthält.
Ejemplo:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
In diesem Beispiel erstellen wir die Ansicht Sample_View, die alle Zeilenwerte anzeigt, deren Gehaltsfeld größer als 25000 ist. Der Filter befindet sich innerhalb der Ansicht, sodass jede Abfrage, die Daten aus Sample_View auswählt, nur diese Zeilen sieht.
Was ist Index?
Indizes sind Verweise auf einen bestimmten Spaltennamen einer Tabelle. Ziel eines Indexes ist die Verbesserung der Suchgeschwindigkeit: Ohne Index würde eine Abfrage mit einem Prädikat wie beispielsweise WHERE tab1.col1 = 10 Lädt die gesamte Tabelle oder Partition und verarbeitet jede Zeile, während ein Index auf col1 es Hive ermöglicht, nur einen Teil der Datei zu lesen.
- Der Benutzer muss den Index manuell definieren
- Wenn wir einen Index erstellen, bedeutet dies, dass wir einen Zeiger auf einen bestimmten Spaltennamen der Tabelle erstellen.
- Alle Änderungen, die an einer Spalte in der Tabelle vorgenommen werden, werden mithilfe des Indexwerts gespeichert, der für den Spaltennamen erstellt wurde.
Diese Beschleunigung hat ihren Preis. Der Aufbau des Index erfordert zusätzliche Rechenleistung, und der Index selbst belegt Speicherplatz, der zusammen mit der Tabelle verwaltet werden muss.
Syntax:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Ejemplo:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Hier erstellen wir einen Index für die Spalte „id“ in der Tabelle „guruhive_internaltable“. Beachten Sie, dass eine vollständige Anweisung in einer Version, die Indizierung noch unterstützt, auch eine Index-Handler-Klausel benötigt, die im nächsten Abschnitt ausführlich erläutert wird.
Unterschied zwischen Ansicht und Index in Hive
Sichten und Indizes werden oft gemeinsam eingeführt, da beide auf einer bestehenden Tabelle aufbauen, lösen aber unterschiedliche Probleme. Eine Sicht ändert, was eine Abfrage sieht, während ein Index die Geschwindigkeit erhöht, mit der Hive die Daten findet. Die folgende Tabelle vergleicht sie.
| Aspekt | Ansehen | Index |
|---|---|---|
| Was es speichert | Nur die SELECT-Anweisung im Metastore | Eine separate Indextabelle, die Zeiger auf die Daten enthält. |
| Zweck | Vereinfachen oder beschränken Sie die Rückgabewerte einer Abfrage. | Verringern Sie die Menge der für ein Prädikat gescannten Daten. |
| Festplattenkosten | Keine Präsentation | Zusätzlicher Speicherplatz und ein Neuaufbau nach Datenänderungen |
| Schreibzugriff | Nur-Lese- | Wird nicht direkt abgefragt; der Optimierer verwendet es. |
| Aktueller Status | Voll unterstützt | In Hive 3.0 entfernt. |
In der Praxis wird eine Ansicht zur besseren Lesbarkeit und Zugriffskontrolle erstellt, während ein Index ausschließlich zur Leistungsoptimierung für eine bestimmte Spalte erstellt wird.
Indextypen in Hive mit Syntax
Bis einschließlich Hive 2.x wurden zwei Index-Handler ausgeliefert, wobei der Handler in der obligatorischen AS-Klausel angegeben wird. Kompakte Indizierung wurde mit Hive 0.7.0 und Bitmap-Indizierung mit Hive 0.8.0 eingeführt.
- Kompaktindex: Speichert den Wert zusammen mit der Adresse des HDFS-Blocks, der ihn enthält, anstatt die Position jedes einzelnen Vorkommens zu protokollieren. Dies eignet sich für Spalten mit vielen unterschiedlichen Werten.
- Bitmap-Index: speichert eine Bitmap pro eindeutigem Wert, was die übliche Vorgehensweise für eine Spalte mit nur wenigen eindeutigen Werten ist, wie z. B. ein Status- oder Geschlechtsflag.
Es wird ein kompakter Index erstellt, aufgelistet und wie folgt gelöscht:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Die Option WITH DEFERRED REBUILD registriert den Index, ohne ihn zu füllen, sodass der Build separat mit ALTER INDEX geplant werden kann. Ein Bitmap-Index wird auf die gleiche Weise erstellt, jedoch mit einem anderen Handler-Namen:
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;
Ein Index wird nicht automatisch aktualisiert. Immer wenn die Basistabelle neue Daten erhält, muss ALTER INDEX … REBUILD erneut ausgeführt werden, und bei einer partitionierten Tabelle kann die Aktualisierung auf eine einzelne Partition beschränkt werden.
Warum die Indizierung in Hive 3.0 entfernt wurde
Die Indizierung wurde in Hive Version 3.0 (HIVE-18448) entfernt. Daher existieren die Befehle CREATE INDEX, SHOW INDEX und DROP INDEX in aktuellen Clustern nicht mehr. Der Aufwand für einen erneuten Aufbau dieser Funktion lohnte sich nach der Einführung der spaltenorientierten Speicherung und des kostenbasierten Optimierers nur noch selten. Drei Alternativen decken denselben Bereich ab.
- Materialisierte Ansichten: eingeführt in Hive 3.0.0, ein materialisierte Ansicht speichert das vorab berechnete Ergebnis einer Abfrage, und der Optimierer schreibt eingehende Abfragen automatisch anhand dieses Ergebnisses um.
- Spaltenorientierte Dateiformate: ORC und Parquet verfügen über eigene, leichtgewichtige Indizes und Min/Max-Statistiken, sodass der Leser ganze Stripes, Blöcke oder Dateien ohne benutzerdefinierten Index überspringen kann.
- Partitionen und Buckets: Partitionierung und Bucketing Die Daten werden auf Verzeichnis- und Dateiebene bereinigt, wodurch in der Regel weitaus mehr Daten entfernt werden als durch einen Index.
Auf Hive 2.x ist ein Index zwar noch gültig, für neue Projekte eignen sich jedoch besser eine der oben genannten Optionen.
