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.
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.
Aus dem obigen Screenshot geht hervor, dass wir zwei Dinge tun:
- Erstellen der Datenbank „guru99“ in Hive
- 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.
Im obigen Screenshot tun wir zwei Dinge:
- Wir fallen.ping Datenbank 'guru99' von Hive
- Ü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.



