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.

  • ๐Ÿ‘๏ธ Die Ansicht ist logisch: Eine Ansicht speichert nur ihre SELECT-Anweisung im Metastore, sodass sie keinen eigenen Speicherplatz belegt.
  • ๐Ÿ”’ Schreibgeschรผtzt (laut Design): Eine View kann nicht Ziel von LOAD, INSERT oder ALTER sein, da Hive sie bei jeder Abfrage neu auswertet.
  • ๐Ÿ“ Indexpunkte auf Daten: Ein Index ist ein Zeiger auf einen Spaltenwert, der es Hive ermรถglicht, nur einen Teil einer Datei anstatt der gesamten Tabelle zu lesen.
  • ๐Ÿ—‚๏ธ Zwei Betreuer: Kompakte Indizierung eignet sich fรผr Spalten mit hoher Kardinalitรคt, Bitmap-Indizierung eignet sich fรผr Spalten mit wenigen unterschiedlichen Werten.
  • ๐Ÿ”„ Manuelle Neuinstallation: Ein Index wird niemals automatisch aktualisiert, daher muss ALTER INDEX REBUILD nach ร„nderungen an der Basistabelle ausgefรผhrt werden.
  • ๐Ÿšซ In Hive 3.0 entfernt: Mit HIVE-18448 wurde die Indizierung eingestellt und durch materialisierte Sichten, ORC- oder Parquet-Speicherung und Partitionierung ersetzt.

Views und Indizes in Hive anhand von Beispielen erklรคrt.

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.

Hรคufig gestellte Fragen

Mit DROP VIEW view_name wird die Ansicht gelรถscht, und mit ALTER VIEW view_name RENAME TO new_name wird sie umbenannt. Da eine Ansicht keine Daten enthรคlt, wird sie gelรถscht.ping Die Basistabelle wird nie verรคndert; lediglich der Eintrag im Metastore verschwindet.

Eine materialisierte Sicht speichert das vorab berechnete Abfrageergebnis als reale Daten, benรถtigt daher Speicherplatz und erfordert einen REBUILD-Vorgang. Eine normale Sicht speichert lediglich den Abfragetext und wird bei jedem Zugriff neu berechnet.

Nein. Der Metastore speichert lediglich die SELECT-Anweisung und die Liste der aufgelรถsten Spalten. Jede Referenz fรผhrt die zugrundeliegende Abfrage erneut aus, weshalb eine Ansicht รผber einen langsamen Join langsam bleibt.

In Hive 0.12.0 und frรผheren Versionen wurde bei CREATE INDEX und DROP INDEX zwischen GroรŸ- und Kleinschreibung unterschieden, wรคhrend ALTER INDEX Kleinbuchstaben erforderte. Hive 0.13.0 hat die GroรŸ- und Kleinschreibung bei Indexnamen fรผr alle Anweisungen deaktiviert.

Ja, auf jedem modernen Cluster. Partition Pruning entfernt ganze Verzeichnisse, bevor der Scan beginnt, und Bucketing beschrรคnkt einen Join oder eine Stichprobe auf bestimmte Dateien, was in der Regel besser ist als das, was eine Indextabelle leisten kรถnnte.

Tools fรผr maschinelles Lernen analysieren Abfrageprotokolle, ordnen Prรคdikatspalten nach Selektivitรคt und Hรคufigkeit und geben Hinweise darauf, wo sich eine materialisierte Sicht oder ein Partitionierungsschema lohnen wรผrde. Validieren Sie jeden Vorschlag anhand eines EXPLAIN-Plans, bevor Sie ihn anwenden.

Es erzeugt zuverlรคssig CREATE VIEW-Anweisungen aus einem kurzen Kommentar. Beachten Sie versionsspezifische Unterschiede, da es weiterhin CREATE INDEX-Syntax ausgibt, die von einem Hive-Cluster der Version 3.0 oder hรถher direkt abgelehnt wird.

Der Index ist eine separate Tabelle mit Zeigern, die von Hive bei ร„nderungen der Basistabelle nie aktualisiert wird. Ohne einen Neuaufbau veralten die Zeiger, sodass der Optimierer den Index entweder รผberspringt oder veraltete Treffer zurรผckgibt.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: