Hive-Tabelle erstellen: Intern, Ändern & Löschen mit Beispielen

⚡ Intelligente Zusammenfassung

Erstellen, Ändern und Ablegenping Tabellen in Apache Hive verwenden bekannte SQL-ähnliche DDL-Anweisungen, das Ergebnis hängt jedoch davon ab, ob es sich um eine interne Tabelle handelt, die von Hive verwaltet wird, oder um eine externe Tabelle, die lediglich Dateien beschreibt.

  • 🧱 TABELLE ERSTELLEN: Eine einzige Anweisung definiert die Spalten, das Zeilenformat und optional den Speicherort einer Hive-Tabelle.
  • 🏷️ TABELLE ÄNDERN: RENAME ändert den Tabellennamen, und ADD COLUMNS oder CHANGE COLUMN bearbeiten das Schema, ohne die Daten neu zu laden.
  • 🗑️ DROP TABLE: Dropping Eine interne Tabelle löscht sowohl Schema als auch Daten, während DROPping Eine externe Tabelle entfernt nur die Metadaten.
  • 🔒 Internal ist im Besitz von: Eine interne oder verwaltete Tabelle befindet sich im Warehouse-Verzeichnis und wird von Hive über ihren gesamten Lebenszyklus gesteuert.
  • 🔗 Externe Referenzen werden verwendet: Eine externe Tabelle verweist auf Dateien, die auch von anderen Tools gelesen werden, sodass diese Dateien den Datenverlust überstehen.
  • 🔎 Überprüfen Sie den Typ: DESCRIBE FORMATTED meldet MANAGED_TABLE oder EXTERNAL_TABLE, wodurch jegliches Rätselraten vor dem Löschen entfällt.

Hive-Befehle zum Erstellen, Ändern und Löschen von Tabellen mit Beispielen

Tabellenoperationen wie Erstellen, Ändern und Löschenping In dieser Schritt-für-Schritt-Anleitung können Sie sich die Tabellen in Hive ansehen. Jeder Vorgang wird zunächst als Live-Sitzung und anschließend als wiederverwendbare Anweisung dargestellt.

Wie man eine Tabelle in Hive erstellt, ändert und löscht

Im folgenden Screenshot erstellen wir eine Tabelle mit Spalten und ändern den Tabellennamen.

  1. Die Tabelle guru_sample mit zwei Spaltennamen wie „empid“ und „empname“ wird erstellt.
  2. Anzeigen der in der guru99-Datenbank vorhandenen Tabellen
  3. guru_sample wird unter Tabellen angezeigt
  4. Tabelle „guru_sample“ wird in „guru_sampleNew“ geändert
  5. Wenn Sie den Befehl „show“ erneut ausführen, wird der neue Name guru_sampleNew angezeigt.

Die folgende Sitzung führt alle fünf Schritte nacheinander durch. hive> Die Eingabeaufforderung und die beiden SHOW TABLES-Aufrufe vor und nach der Umbenennung machen den Effekt sichtbar.

Hive-Session erstellt guru_sample und benennt es in guru_sampleNew um.

Dropping Tabelle guru_sampleNew:

Mit einer einzigen DROP TABLE-Anweisung wird die umbenannte Tabelle entfernt, und Hive antwortet mit OK.

Bienenstockschalen-Abwurfping die Tabelle guru_sampleNew mit einer OK-Antwort

Hive CREATE TABLE Syntax und häufig verwendete Klauseln

Das obige Beispiel verwendet die kürzestmögliche Form. Die dokumentierte Anweisung akzeptiert mehrere optionale Klauseln, von denen jede eine bestimmte Einstellung vornimmt; das Beispiel belässt diese auf dem Standardwert.

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type, ...)]
  [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS]
  [ROW FORMAT row_format]
  [STORED AS file_format]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)];
Klausel Was es steuert
EXTERNAL Es wird eine externe Tabelle erstellt, daher bleiben die Datendateien bei DROP an ihrem ursprünglichen Ort.
VORÜBERGEHEND Erstellt eine sitzungsbezogene Tabelle, die nach Beendigung der Sitzung verschwindet.
WENN NICHT EXISTIERT Unterdrückt den Fehler, wenn bereits eine Tabelle mit diesem Namen existiert.
AUFGETEILT DURCH Teilt die Tabelle in ein Verzeichnis pro Schlüsselwert auf
GRUPPELT DURCH … IN n EIMER Teilt Zeilen in eine feste Anzahl von Dateien auf.
ZEILENFORMAT / GESPEICHERT ALS Legt das Trennzeichen (SerDe) und das Dateiformat fest, z. B. TEXTFILE, ORC oder Parquet.
STANDORT Verweist die Tabelle auf einen bestimmten HDFS-Pfad anstelle des Standardpfads des Data Warehouse.
TBLPROPERTIES Fügt Metadaten-Schlüssel-Wert-Paare hinzu, einschließlich external.table.purge

Eine verwandte Form, CREATE TABLE new_table LIKE existing_table, kopiert ein Schema, ohne Zeilen zu kopieren. Strukturklauseln wie PARTITIONED BY und CLUSTERED BY werden im Leitfaden ausführlich behandelt. Hive-Partitionen und Buckets.

Tabellentypen und ihre Verwendung

Was Tabellen angeht, so funktioniert es genauso wie in traditionellen relationalen Datenbanken. Funktionen wie Filtern und Verknüpfen können auf Tabellen angewendet werden.

Hive arbeitet mit zwei Arten von Tabellenstrukturen, internen und externen Tabellen, abhängig vom Laden und Design des Schemas. HiveDie Wahl ist nicht kosmetischer Natur: Sie entscheidet darüber, wem die Datendateien gehören und was mit ihnen geschieht, wenn die Tabelle gelöscht wird.

Interne Tabellen in Hive

  • Interne Tabellen sind naturgemäß eng miteinander verknüpft. Bei diesem Tabellentyp müssen wir zuerst die Tabelle erstellen und dann die Daten laden.
  • Wir können dies als Daten zum Schema bezeichnen.
  • Durch Tropfenping Diese Tabelle, sowohl die Daten als auch das Schema, werden entfernt.
  • Der Speicherort dieser Tabelle ist /user/hive/warehouse.
  • Interne Tabellen werden auch als verwaltete Tabellen bezeichnet und unterstützen als einzige die Transaktionen TRUNCATE, ARCHIVE, MERGE, CONCATENATE und ACID.

Wann sollte man eine interne Tabelle wählen?

  • Wenn die Verarbeitungsdaten im lokalen Dateisystem verfügbar sind
  • Wenn wir möchten, dass Hive den gesamten Lebenszyklus der Daten einschließlich der Löschung verwaltet

Beispielcode-Snippet für interne Tabelle

  1. Um die interne Tabelle zu erstellen
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Laden Sie die Daten in die interne Tabelle
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Zeigen Sie den Inhalt der Tabelle an
        Hive>select * from guruhive_internaltable;
  4. Um die interne Tabelle zu löschen
        Hive>DROP TABLE guruhive_internaltable;

Wenn Sie die Tabelle „guruhive_internaltable“ löschen, werden einschließlich ihrer Metadaten und Daten aus Hive entfernt. Sofern nicht explizit „PURGE“ angegeben wird, werden die Dateien in den HDFS-Papierkorb verschoben, anstatt sofort gelöscht zu werden.

Im folgenden Screenshot können wir die Ausgabe aller vier Anweisungen in einer Sitzung beobachten, die mit dem erfolgreichen Ablegen endet.

Erstellung, Laden, Abfragen und Löschen von Hive-Sitzungenping guruhive_internaltable

Im obigen Code und im Screenshot führen wir folgende Schritte aus:

  • Erstellen Sie die interne Tabelle
  • Laden Sie die Daten in die interne Tabelle
  • Zeigen Sie den Inhalt der Tabelle an
  • Um die interne Tabelle zu löschen

Externe Tabellen in Hive

  • Externe Tabellen sind lose gekoppelt. Die Daten sind in HDFS verfügbar. Die Tabelle wird auf Basis der HDFS-Daten erstellt.
  • Anders ausgedrückt: Es wird ein Schema für die Daten erstellt.
  • Zum Zeitpunkt des Abwurfsping Die Tabelle löscht lediglich das Schema; die Daten bleiben wie zuvor in HDFS verfügbar.
  • Externe Tabellen bieten die Möglichkeit, mehrere Schemata für die in HDFS gespeicherten Daten zu erstellen, anstatt die Daten jedes Mal zu löschen, wenn das Schema aktualisiert wird
  • Ab Hive 4.0.0 bewirkt das Setzen der Tabelleneigenschaft external.table.purge auf true, dass DROP die Daten ebenfalls löscht.

Wann sollte man sich für einen externen Tisch entscheiden?

  • Wenn die Verarbeitungsdaten in HDFS verfügbar sind
  • Nützlich, wenn die Dateien außerhalb von Hive verwendet werden

Beispielcode-Snippet für externe Tabelle

  1. Externe Tabelle erstellen
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. Wenn wir den Speicherort bei der Tabellenerstellung nicht angeben, können wir die Daten manuell laden.
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. Zeigen Sie den Inhalt der Tabelle an
      Hive>select * from guruhive_external;
  4. Um die externe Tabelle zu löschen
      Hive>DROP TABLE guruhive_external;

Der folgende Screenshot zeigt die Ausgabe. Beachten Sie, dass der letzte Schritt nur das Schema entfernt – die Datei unter dem Pfad LOCATION bleibt unberührt.

Erstellung, Laden, Abfragen und Löschen von Hive-Sitzungenping guruhive_external

Im obigen Code führen wir folgende Schritte aus:

  • Erstellen Sie die externe Tabelle
  • Laden Sie die Daten in die externe Tabelle
  • Zeigen Sie den Inhalt der Tabelle an
  • Dropping externe Tabelle

Unterschied zwischen internen und externen Tabellen

Funktion Intern Extern
Schema Daten zum Schema Schema zu Daten
Lagerraum /user/hive/warehouse HDFS-Standort angegeben von LOCATION
Datenverfügbarkeit Innerhalb des lokalen Dateisystems Innerhalb von HDFS
Wirkung von TROP Löscht Schema und Daten Löscht nur das Schema, es sei denn, external.table.purge ist auf true gesetzt.
TRUNCATE-Unterstützung Unterstützt Nicht unterstützt
ACID-Transaktionen Unterstützt Nicht unterstützt

Das Apache Hive-Dokumentation Die Regel lautet ganz klar: Hive geht davon aus, dass es die Daten für verwaltete Tabellen besitzt, und davon, dass es dies für externe Tabellen nicht tut, und jeder oben genannte Unterschied ergibt sich aus dieser einen Annahme.

ALTER TABLE- und DROP TABLE-Befehlsreferenz

Die obigen Screenshots zeigen lediglich eine Umbenennung und eine Löschung. Dies sind die Anweisungen, die ein Anwender am häufigsten auf eine bestehende Tabelle anwendet.

Erklärung Zweck
ALTER TABLE Tabellenname RENAME TO neuer_Name; Benennt die Tabelle um; bei einer verwalteten Tabelle wird dadurch auch das zugehörige HDFS-Verzeichnis verschoben.
ALTER TABLE table_name ADD COLUMNS (col_name data_type); Fügt dem Schema eine oder mehrere Spalten am Ende hinzu.
ALTER TABLE Tabellenname CHANGE COLUMN alter_Name neuer_Name Datentyp; Benennt eine Spalte um oder ändert ihren Datentyp
ALTER TABLE Tabellenname REPLACE COLUMNS (…); Ersetzt die gesamte Spaltenliste durch eine neue.
ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); Konvertiert eine verwaltete Tabelle in eine externe Tabelle, und FALSE macht dies rückgängig.
DROP TABLE [IF EXISTS] table_name [PURGE]; Entfernt die Tabelle; PURGE überspringt den Papierkorb, sodass die Daten nicht wiederhergestellt werden können.
TRUNCATE [TABLE] table_name; Entfernt alle Zeilen, behält aber das Schema bei; nur verwaltete Tabellen

Zwei Sicherheitsvorkehrungen sollten in jedes Skript eingebaut werden. IF EXISTS verhindert, dass ein Löschvorgang für eine bereits gelöschte Tabelle fehlschlägt, und DESCRIBE FORMATTED prüft vor dem Ausführen des Löschvorgangs, ob es sich bei dem Ziel um eine MANAGED_TABLE oder eine EXTERNAL_TABLE handelt.

Häufig gestellte Fragen

Führen Sie DESCRIBE FORMATTED table_name aus. Die Zeile „Tabellentyp“ gibt entweder MANAGED_TABLE oder EXTERNAL_TABLE an. Die Prüfung vor dem Löschen von Daten ist die kostengünstigste Methode, um das Löschen von Daten zu vermeiden, auf die andere Jobs noch zugreifen.

Ja. Mit `ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE')` wird der Datentyp im Metastore geändert, mit `FALSE` wird er wiederhergestellt. Die Datendateien bleiben an ihrem Speicherort, ein erneutes Laden ist also nicht erforderlich.

Normalerweise nicht, nur der Metastore-Eintrag wird gelöscht. Ab Hive 4.0.0 werden jedoch auch die Daten einer externen Tabelle, deren Eigenschaft `external.table.purge` auf `true` gesetzt ist, durch `DROP` gelöscht. Überprüfen Sie daher zuerst die Eigenschaften.

Ein einfacher CREATE TABLE-Befehl erzeugt nun standardmäßig eine verwaltete, transaktionale ORC-Tabelle anstelle einer einfachen Texttabelle. Das Hinzufügen des Schlüsselworts EXTERNAL sorgt dafür, dass das ältere, nicht ACID-konforme Verhalten auf einem Hive-3-Cluster erhalten bleibt.

TRUNCATE entfernt alle Zeilen, behält aber das Schema bei und funktioniert nur bei verwalteten Tabellen. DROP entfernt ebenfalls das Schema. TRUNCATE ist die sicherere Wahl, wenn die Tabellendefinition auch nach einem Neuladen erhalten bleiben soll.

Nein. Hive wandelt Bezeichner im Metastore in Kleinbuchstaben um, daher verweisen GURU_SAMPLE und guru_sample auf dieselbe Tabelle. Zeichenkettenwerte innerhalb der Daten bleiben jedoch case-sensitiv, weshalb ein WHERE-Vergleich weiterhin Zeilen auslassen kann.

Ja. Die Machine-Learning-Funktionen in Katalogtools analysieren Spaltenkardinalität, Nullwerte und Abfragemuster und schlagen anschließend Datentypen, Dateiformate und Partitionsschlüssel vor. Betrachten Sie die Ausgabe als Entwurf, da das Modell die geplante Arbeitslast nicht vorhersehen kann.

Copilot vervollständigt CREATE-, ALTER- und DROP-Anweisungen anhand eines kurzen Kommentars, und agentenbasierte Assistenten können ein komplettes Migrationsskript erstellen. RevBeachten Sie das Schlüsselwort EXTERNAL und die Option PURGE, denn eine falsche Eingabe führt zum Löschen echter Daten.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: