Die Explode-Funktion beherrschen
In diesem Schritt werden wir die Explode-Funktion erkunden, die uns ermöglicht, komplexe Datentypen wie Arrays und Maps in mehrere Zeilen umzuwandeln.
Lassen Sie uns beginnen, indem wir einen neuen Beispiel-Datensatz erstellen. Navigieren Sie zum Verzeichnis /home/hadoop
und erstellen Sie eine Datei namens array_data.txt
mit den folgenden Inhalten:
## Wechseln Sie in das Verzeichnis und erstellen Sie eine neue Datei
cd /home/hadoop
vim array_data.txt
Geben Sie die folgenden Inhalte ein:
[1,2,3],[4,5],[6,7,8,9]
[10,11],[12,13,14],[15]
Als Nächstes erstellen Sie eine Hive-Tabelle, um diese Daten zu speichern:
CREATE TABLE array_table (arr ARRAY<STRING>);
LOAD DATA LOCAL INPATH '/home/hadoop/array_data.txt' INTO TABLE array_table;
Nun verwenden wir die Explode-Funktion, um das Array-Daten in einzelne Zeilen zu flachziehen:
SELECT explode(arr) AS num FROM array_table;
Diese Abfrage wird jedes Element im arr
-Array in eine separate Zeile umwandeln, mit dem entsprechenden Wert in der num
-Spalte.
Wir können die Explode-Funktion auch in Verbindung mit der Lateral View verwenden, um komplexe Datentypen wie Maps zu verarbeiten:
CREATE TABLE map_table (key STRING, value MAP<STRING, INT>);
INSERT INTO map_table
SELECT * FROM (
SELECT 'entry1' AS key, map('a', 1, 'b', 2, 'c', 3) AS value
UNION ALL
SELECT 'entry2' AS key, map('d', 4, 'e', 5) AS value
) AS temp_table;
SELECT key, map_keys, map_values
FROM map_table
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values;
Der gegebene SQL-Befehl ist eine Abfrage, die in der Hive-Abfragesprache geschrieben ist. Hier ist eine Erklärung der Abfrage:
SELECT key, map_keys, map_values
: Dies gibt die Spalten an, die im Ergebnis ausgewählt werden sollen. Das Ergebnis wird drei Spalten enthalten: key
, map_keys
und map_values
.
FROM map_table
: Dies zeigt an, dass die Abfrage auf der map_table
-Tabelle ausgeführt wird.
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values
: Dies ist eine Lateral View, die die value
-Spalte der map_table
explodiert. Die EXPLODE
-Funktion wird verwendet, um jedes Schlüssel-Wert-Paar in der MAP
-Spalte in separate Zeilen umzuwandeln. Die aufgesprengten Werte werden den Aliasen map_keys
und map_values
zugewiesen.
Zusammenfassend genommen holt die Abfrage Daten aus der map_table
-Tabelle. Anschließend verwendet sie die LATERAL VIEW EXPLODE
-Klausel, um die value
-Spalte zu erweitern, was zu separaten Zeilen für jedes Schlüssel-Wert-Paar in der MAP
-Spalte führt. Die resultierenden Zeilen werden die key
-Spalte aus der map_table
haben, zusammen mit den aufgesprengten map_keys
und map_values
-Spalten, die die einzelnen Schlüssel und Werte aus der MAP
-Spalte darstellen, respective.