Hive-Datentypen: So erstellen und löschen Sie Datenbanken in Hive

⚡ Intelligente Zusammenfassung

Die Hive-Datentypen definieren, was jede Tabellenspalte enthalten kann, und die Befehle CREATE DATABASE und DROP DATABASE richten den Namespace ein bzw. entfernen ihn, in dem sich diese Tabellen innerhalb des Hive-Metastores befinden.

  • 🔢 Numerische Typen: TINYINT bis BIGINT decken ganze Zahlen ab, während DECIMAL(Präzision, Skalierung) exakte Werte speichert, was FLOAT und DOUBLE nicht können.
  • 🔤 Zeichenkettentypen: STRING hat keine festgelegte Begrenzung, VARCHAR akzeptiert 1 bis 65535 Zeichen und CHAR ist auf maximal 255 Zeichen begrenzt.
  • 📅 Datum und Zeit: DATE speichert einen einfachen Wert im Format JJJJ-MM-TT, TIMESTAMP fügt optional eine Nanosekunden-Genauigkeit hinzu.
  • 🧩 Komplexe Typen: ARRAY, MAP, STRUCT und UNIONTYPE packen mehrere zusammengehörige Werte in eine Spalte anstatt in viele.
  • ???? ️ Erstellen Sie eine Datenbank: CREATE DATABASE registriert einen Namespace im Metastore, und SHOW DATABASES bestätigt dessen Existenz.
  • 🗑️ Datenbank löschen: Mit DROP DATABASE wird der Namespace entfernt, und CASCADE ist erforderlich, wenn sich noch Tabellen darin befinden.

Hive-Datentypen und wie man Datenbanken in Hive erstellt und löscht

Datentypen sind sehr wichtige Elemente der Hive-Abfragesprache und der Datenmodellierung. Um die Spaltentypen einer Tabelle zu definieren, müssen wir die Datentypen und ihre Verwendung kennen.

Im Folgenden finden Sie einen kurzen Überblick über einige in Hive vorhandene Datentypen:

  • Numerische Typen
  • String-Typen
  • Datums-/Uhrzeittypen
  • Komplexe Typen

Datentypen in Hive

Jede Hive-Spalte wird mit einem der unten aufgeführten Typen deklariert. Die primitiven Familien stehen an erster Stelle, gefolgt von den komplexen Typen, die mehr als einen Wert in einer einzelnen Spalte speichern können.

Numerische Hive-Datentypen

Numerische Spalten reichen von einem Byte bis zu acht Bytes. Durch die Wahl des kleinsten Datentyps, der zu den Werten passt, werden sowohl Speicher- als auch Scankosten reduziert.

Typ Speicherzuweisung
WINZIG 1-Byte-Ganzzahl mit Vorzeichen (-128 bis 127)
KLEIN 2-Byte-Ganzzahl mit Vorzeichen (-32,768 bis 32,767)
INT 4-Byte-Ganzzahl mit Vorzeichen (-2,147,483,648 bis 2,147,483,647)
GROSSARTIG 8-Byte-Ganzzahl mit Vorzeichen (-9,223,372,036,854,775,808 bis 9,223,372,036,854,775,807)
FLOAT 4-Byte-Gleitkommazahl einfacher Genauigkeit
DOPPELT 8-Byte-Gleitkommazahl doppelter Genauigkeit
DEZIMAL In diesem Datentyp können wir Genauigkeit und Skalierung als DECIMAL(Genauigkeit, Skalierung) definieren. Werden diese weggelassen, verwendet Hive DECIMAL(10,0).

Hive-String-Datentypen

Zeichenspalten gibt es in drei Formen, der Unterschied besteht darin, ob Hive eine festgelegte Länge erzwingt.

Typ Länge
VERKOHLEN Feste Länge, maximal 255 Zeichen. Kürzere Werte werden mit Leerzeichen aufgefüllt.
VARCHAR 1 bis 65,535 Zeichen. Längere Werte werden stillschweigend abgeschnitten.
STRING Wir können hier die Länge definieren (keine Begrenzung).

Hive-Datums-/Uhrzeitdatentypen

Zeitliche Spalten werden ohne Zeitzonenverschiebung gespeichert, was man sich merken sollte, bevor man Werte vergleicht, die von verschiedenen Clustern geschrieben wurden.

Typ Anwendungsbereich
Timestamp Unterstützt traditionell Unix Zeitstempel mit optionaler Genauigkeit im Nanosekundenbereich
Datum Es liegt im Format JJJJ-MM-TT vor.
Der für den Datentyp „Datum“ unterstützte Wertebereich liegt zwischen 0000-01-01 und 9999-12-31, abhängig von der Unterstützung durch das entsprechende primitive Datentyp. Java Datumstyp

Verschiedene Datentypen in Hive

Zwei weitere primitive Datentypen stehen außerhalb der numerischen, Zeichenketten- und Datumsfamilien, kommen aber regelmäßig in realen Datenschemata vor.

Typ Anwendungsbereich
BOOLEAN Speichert wahr oder falsch
BINARY Speichert ein Byte-Array, wodurch der Rohinhalt aus einer STRING-Spalte herausgehalten wird.

Komplexe Hive-Datentypen

Komplexe Datentypen verschachteln Werte innerhalb einer Spalte, wodurch der zusätzliche Join entfällt, der bei einem relationalen Datentyp erforderlich wäre.

Typ Anwendungsbereich
Arrays ARRAY
Negative Werte und nicht konstante Ausdrücke sind nicht zulässig
Landkarten KARTE
Negative Werte und nicht konstante Ausdrücke sind nicht zulässig
Strukturen STRUKTUR
Union UNIONTYPE

Beispiel für komplexe Datentypen in Hive

Die obige Tabelle zeigt die Deklarationsform. Die folgende Anweisung fasst drei der komplexen Datentypen in einer Tabelle zusammen, sodass die Trennklauseln und die Zugriffssyntax gemeinsam dargestellt werden können.

CREATE TABLE employees (
  name      STRING,
  skills    ARRAY<STRING>,
  deductions MAP<STRING, FLOAT>,
  address   STRUCT<street:STRING, city:STRING, pin:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

Hierfür werden drei separate Trennzeichen benötigt: eines zwischen Spalten, ein zweites zwischen den Elementen eines ARRAY oder einer STRUCT und ein drittes zwischen einem MAP-Schlüssel und seinem Wert. Sobald die Tabelle existiert, wird jede komplexe Spalte mit ihrer eigenen Zugriffsmethode gelesen.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

Die folgende Tabelle fasst zusammen, welcher Accessor zu welchem ​​Typ gehört.

Typ Wie ein Wert gelesen wird
ARRAY Nullbasierter Index, wie z. B. skills[0]
MAP Schlüsselsuche in eckigen Klammern, z. B. deductions['tax']
STRUKT Punktnotation im Feldnamen, z. B. address.city
UNIONTYPE Wird selten verwendet, da die Abfrageunterstützung dafür unvollständig geblieben ist.

Komplexe Datentypen können verschachtelt sein, daher ARRAY > ist eine gültige Spaltendeklaration. Sobald das Spaltenlayout festgelegt ist, werden die Tabellen selbst mit den in diesem Abschnitt beschriebenen Anweisungen erstellt. Hive-Tabelle erstellen, ändern und löschen.

So erstellen und löschen Sie Datenbanken in Hive

Eine Datenbank in Hive ist im Grunde ein Namensraum, der Tabellen gruppiert. Daher muss sie als erstes Objekt erstellt werden, bevor mit der eigentlichen Tabellenarbeit begonnen wird. Im Folgenden werden die Schritte zum Erstellen und Löschen von Datenbanken in Hive beschrieben.

Schritt 1) ​​Datenbank in Hive erstellen

Um eine Datenbank in der Hive-Shell zu erstellen, muss der Befehl wie in der folgenden Syntax gezeigt verwendet werden:

Syntax:

Create database <DatabaseName>

Beispiel: Datenbank „guru99“ erstellen

Der folgende Screenshot zeigt die CREATE-Anweisung, gefolgt von einem SHOW-Befehl, der alle Datenbanken im Cluster auflistet.

Hive-Shell erstellt die guru99-Datenbank und listet Datenbanken mit dem Befehl „show“ auf.

Aus dem obigen Screenshot geht hervor, dass wir zwei Dinge tun:

  1. Erstellen der Datenbank „guru99“ in Hive
  2. Vorhandene Datenbanken mit dem Befehl „show“ anzeigen

Im selben Bildschirm wird am Ende die Datenbank „guru99“ angezeigt, wenn wir den Befehl „show“ ausführen. Dies bedeutet, dass die Datenbank „guru99“ erfolgreich erstellt wurde.

Schritt 2) Datenbank in Hive ablegen

Für Tropfenping Um eine Datenbank in der Hive-Shell zu erstellen, muss der Befehl „drop“ verwendet werden, wie in der folgenden Syntax gezeigt:

Syntax:

Drop database <DatabaseName>

Beispiel: Datenbank guru99 löschen

Im nächsten Screenshot wird zuerst die DROP-Anweisung ausgeführt, und der anschließende SHOW-Befehl listet die Datenbank nicht mehr auf.

Bienenstockschalen-Abwurfping die Guru99-Datenbank und Bestätigung der Entfernung mit Show

Im obigen Screenshot tun wir zwei Dinge:

  1. Wir fallen.ping Datenbank 'guru99' von Hive
  2. Überprüfen Sie dies mit dem Befehl „show“.

Im selben Fenster wird nach der Überprüfung der Datenbanken mit dem Befehl „show“ die Datenbank „guru99“ nicht in Hive angezeigt. Wir können daher bestätigen, dass die Datenbank „guru99“ gelöscht wurde.

Hive-Datenbankbefehle: USE, DESCRIBE, SHOW und ALTER DATABASE

Die beiden obigen Anweisungen verwenden ihre kürzeste Form. Die dokumentierte Syntax enthält optionale Klauseln, die festlegen, wo die Dateien gespeichert werden und was geschieht, wenn der Name bereits vergeben ist.

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

Die Schlüsselwörter DATABASE und SCHEMA sind überall austauschbar, daher bewirken CREATE SCHEMA und CREATE DATABASE genau dasselbe. Die übrigen Befehle vervollständigen die tägliche Arbeit mit einem Namensraum.

Befehl Was sie tut,
DATENBANKEN ANZEIGEN; Listet alle im Metastore registrierten Datenbanken auf.
USE Datenbankname; Legt die aktuelle Datenbank so fest, dass Tabellennamen kein Präfix benötigen.
DESCRIBE DATABASE database_name; Meldet den Kommentar, den HDFS-Standort und den Eigentümer
DESCRIBE DATABASE EXTENDED database_name; Fügt die DBPROPERTIES-Schlüssel-Wert-Paare zu dieser Ausgabe hinzu.
ALTER DATABASE database_name SET DBPROPERTIES (…); Fügt Metadateneigenschaften hinzu oder ersetzt diese.
ALTER DATABASE database_name SET OWNER USER user_name; Überträgt die Inhaberschaft an einen anderen Benutzer oder eine andere Rolle
ALTER DATABASE database_name SET LOCATION hdfs_path; Ändert den Pfad, der von Tabellen verwendet wird, die ab diesem Zeitpunkt erstellt werden

Zwei Standardeinstellungen sind wichtig. Ohne eine LOCATION-Klausel befinden sich die Dateien im Warehouse-Verzeichnis, normalerweise /user/hive/warehouse/database_name.db, und ohne IF EXISTS führt das Löschen einer Datei mit einem nicht vorhandenen Namen zu einem Fehler, anstatt stillschweigend abgeschlossen zu werden. Beide Einstellungen werden in der Datei gespeichert. Hive Metastore.

Hive-Datentypkonvertierung und häufige Fehler

Typen werden nicht immer exakt so verwendet, wie sie deklariert sind. Hive erweitert einen Wert automatisch, wenn keine Informationen verloren gehen dürfen, und überlässt alles andere einer expliziten Konvertierung.

  • Die implizite Erweiterung folgt der Kette TINYINT zu SMALLINT zu INT zu BIGINT zu FLOAT zu DOUBLE, und ein STRING, der Ziffern enthält, wird zu DOUBLE erweitert.
  • Eine Datenkonvertierung erfolgt nie von selbst, daher ist für eine INT-Spalte, die vom Typ DOUBLE zugewiesen ist, eine schriftliche Konvertierung erforderlich.
  • CAST führt diese Konvertierung durch und gibt NULL anstelle eines Fehlers zurück, wenn der Wert nicht konvertiert werden kann.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Die folgenden Fehler erklären den Großteil der Überraschungen, denen Anfänger bei ihrem ersten Schema begegnen.

Symptom Ursache und Lösung
Das Löschen schlägt fehl, während die Datenbank noch Tabellen enthält. RESTRICT ist die Standardeinstellung. Fügen Sie CASCADE hinzu, um die Tabellen damit zu löschen.
Eine lange Schnur kommt verkürzt an VARCHAR schneidet Daten nach der angegebenen Länge stillschweigend ab. Verwenden Sie STRING, wenn keine Längenbegrenzung gewünscht ist.
Eine Spalte wird nach einer Konvertierung als NULL gelesen. CAST konnte den Wert nicht analysieren. Überprüfen Sie die Quelldaten, bevor Sie den Typ erweitern.
Währungswerte verlieren ihren Paise oder Cent. DECIMAL ohne Argumente bedeutet DECIMAL(10,0). Geben Sie die Skala explizit an.
Zwei identisch aussehende Daten stimmen niemals überein Ein Datum vom Typ STRING und eine Datumsspalte haben unterschiedliche Datentypen. Konvertieren Sie eine Seite, bevor Sie vergleichen.

Sobald die Datentypen korrekt funktionieren, besteht der nächste Schritt darin, die Daten selbst zu laden und abzufragen, was in folgendem Abschnitt behandelt wird: Hive-Abfragen mit ORDER BY, GROUP BY und Cluster By.

Häufig gestellte Fragen

Nein. DATABASE und SCHEMA sind in HiveQL austauschbare Schlüsselwörter, daher erzeugen CREATE SCHEMA sales und CREATE DATABASE sales dasselbe Metastore-Objekt. Die Wahl ist rein eine Frage des internen Standards.

Im Warehouse-Verzeichnis, normalerweise /user/hive/warehouse/database_name.db auf HDFS. Eine LOCATION-Klausel in CREATE DATABASE überschreibt diesen Pfad, und DESCRIBE DATABASE meldet den tatsächlich verwendeten Speicherort.

STRING ist die übliche Wahl, da es keine festgelegte Längenbegrenzung hat und keine Auffüllung benötigt. VARCHAR ist hilfreich, wenn eine bestimmte Länge erzwungen werden muss, und CHAR eignet sich für kurze Codes mit fester Breite, wie z. B. Länderkürzel.

DOUBLE ist eine binäre Gleitkommadarstellung, daher weichen wiederholte Summen um Bruchteile eines Cents ab. DECIMAL speichert exakte Werte mit einer festgelegten Genauigkeit und Skala, wodurch Finanzsummen über mehrere Durchläufe hinweg reproduzierbar bleiben.

Ein einfacher TIMESTAMP-Wert ist zeitzonenunabhängig und wird exakt so gelesen, wie er geschrieben wurde. Hive 3.1 hat TIMESTAMP WITH LOCAL TIME ZONE eingeführt, welches den Wert beim Schreiben in UTC normalisiert und beim Lesen konvertiert.

Ja. Eine STRUCT kann in einem ARRAY enthalten sein, und ein MAP-Wert kann selbst eine STRUCT sein, also ARRAY > ist gültig in Hive. Tiefe Verschachtelungen erschweren die Verwendung von Trennzeichen, daher sollten sie flach gehalten werden.

Ja. Datenprofilierungstools ermitteln Kardinalität, Nullraten und Wertebereiche und schlagen dann den geeignetsten Datentyp und ein Dateiformat vor. Betrachten Sie den Vorschlag als Entwurf, da das Modell zukünftige Arbeitslasten nicht vorhersehen kann.

Copilot erstellt CREATE TABLE- und CREATE DATABASE-Anweisungen anhand eines kurzen Kommentars, und Agentenassistenten können eine Beispieldatei in ein Schema umwandeln. Überprüfen Sie vor der Ausführung des Ergebnisses immer die Dezimalskala und die Trennzeichen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: