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.
