Der Datenabenteuer der Mönche

HadoopHadoopBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In den mystischen Ländern des Ostens stand ein geehrtes Kloster auf einem gewaltigen Berg, umgeben von den Nebeln der alten Weisheit. Innerhalb seiner heiligen Mauern wohnte ein geehrter Kriegermönch namens Hiro, ein Meister der heiligen Kunst der Datenmanipulation. Seine unerschütterliche Hingabe, die Geheimnisse der Daten zu entlocken, hatte ihm den Respekt von Gelehrten und Mönchen gleichermaßen eingebracht.

Eines Tages rief der Abt des Klosters Hiro in seine Kammer, sein Gesicht von Sorge gezeichnet. "Hiro, eine dringende Situation ist entstanden", begann der Abt. "Unsere heiligen Rollen, die das alte Wissen unserer Vorfahren enthalten, sind im ganzen Reich zerstreut. Wir müssen diese unerschätzbare Information wiederfinden und organisieren, bevor sie für immer verloren ist."

Hiro verbeugte sich tief, seine Augen leuchteten von Entschlossenheit. "Ich werde Ihnen nicht im Stich lassen, ehrenwerter Meister", schwur er. "Mit der Macht von Hadoop und seinen Tabellenerzeugungsfunktionen werde ich das Land abseuchen und Ordnung in unser altes Wissen bringen."

Der Abt nickte ernsthaft, setzte seinem unerschütterlichen Entschluss vertrauen. So begann Hiro's Suche, die Tabellenerzeugungsfunktionen von Hive zu meistern, eine Reise, die seine Fähigkeiten und seinen Entschluss bis an ihre äußersten Grenzen testen würde.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/table_generating("Table Generating Function") hadoop/HadoopHiveGroup -.-> hadoop/udf("User Defined Function") subgraph Lab Skills hadoop/hive_shell -.-> lab-289002{{"Der Datenabenteuer der Mönche"}} hadoop/basic_hiveql -.-> lab-289002{{"Der Datenabenteuer der Mönche"}} hadoop/table_generating -.-> lab-289002{{"Der Datenabenteuer der Mönche"}} hadoop/udf -.-> lab-289002{{"Der Datenabenteuer der Mönche"}} end

Die Lateral View-Funktion erkunden

In diesem Schritt werden wir uns der leistungsstarken Lateral View-Funktion widmen, die uns ermöglicht, komplexe Datenstrukturen in verwaltbarere Formen aufzuteilen.

Zunächst erstellen wir einen Beispiel-Datensatz, mit dem wir arbeiten können. Navigieren Sie zum Verzeichnis /home/hadoop und erstellen Sie eine neue Datei namens sample.txt mit den folgenden Inhalten:

Wechseln Sie im Terminal zum Benutzer hadoop mit:

su - hadoop
## Wechseln Sie in das Verzeichnis und erstellen Sie eine neue Datei
cd /home/hadoop
vim sample.txt

Geben Sie die folgenden Inhalte ein:

1,2,3|4,5|6,7,8
9,10|11,12,13|14,15

Stellen Sie sicher, dass die Datei gespeichert und zugänglich ist.

Als Nächstes erstellen wir eine Hive-Tabelle, um diese Daten zu speichern. Öffnen Sie die Hive-Befehlszeile, indem Sie den folgenden Befehl im Terminal ausführen:

hive

Innerhalb der Hive-Befehlszeile führen Sie die folgenden Befehle aus:

CREATE TABLE sample_table (line STRING);
LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt' INTO TABLE sample_table;

Nun verwenden wir die Lateral View-Funktion, um die komplexen Zeichenfolge-Daten in der line-Spalte aufzuteilen:

SELECT line, x, y
FROM sample_table
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp2 AS y;

Der gegebene SQL-Befehl holt Daten aus einer Tabelle namens sample_table mithilfe der Hive-Abfragesprache. Hier ist eine vereinfachte Erklärung der Abfrage:

  1. Wir möchten drei Spalten aus der Tabelle auswählen: line, x und y.

  2. Die Daten werden aus der Tabelle sample_table abgerufen.

  3. Die Abfrage verwendet die LATERAL VIEW OUTER EXPLODE-Klausel zweimal, um zwei separate Operationen durchzuführen:

    • Die erste LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x teilt die Werte in der line-Spalte mit dem Trennzeichen | auf. Die EXPLODE-Funktion wandelt dann das resultierende Array in mehrere Zeilen um. Diese aufgesprengten Werte werden dem Alias x zugewiesen.
    • Die zweite LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp AS y teilt die Werte in der x-Spalte (die im vorherigen Schritt erstellt wurde) mit dem Trennzeichen , auf. Auch hier wandelt die EXPLODE-Funktion das resultierende Array in mehrere Zeilen um. Diese aufgesprengten Werte werden dem Alias y zugewiesen.

Zusammenfassend genommen durchläuft die Abfrage jede Zeile aus sample_table und führt zwei Aufteilungen durch. Zunächst teilt sie die line-Spalte nach |, was mehrere Zeilen mit unterschiedlichen Werten in der x-Spalte erzeugt. Dann teilt sie die x-Spalte nach ,, was noch mehr Zeilen mit unterschiedlichen Werten in der y-Spalte erzeugt. Das Ergebnis ist eine Menge von Zeilen mit allen möglichen Kombinationen von line, x und y-Werten.

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:

  1. 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.
  2. FROM map_table: Dies zeigt an, dass die Abfrage auf der map_table-Tabelle ausgeführt wird.
  3. 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.

Zusammenfassung

In diesem Lab haben wir auf einer Reise durch die mystischen Reiche der Hive-Tabellenerzeugungsfunktionen gestartet, geleitet von der unerschütterlichen Entschlossenheit des Kriegermönchs Hiro. Durch praktische Explorationen haben wir die Macht der Lateral View- und Explode-Funktionen enthüllt und die Kunst der Umwandlung komplexer Datenstrukturen in verwaltbarere Formen beherrscht.

Indem wir komplizierte Daten in einzelne Elemente zerlegen, haben wir die verborgenen Geheimnisse enthüllt, wertvolle Erkenntnisse gewonnen und den Weg für ein tieferes Verständnis ebnet. Genauso wie Hiro's Suche die zerstreuten Rollen des alten Wissens wiedervereinigte, hat unsere Beherrschung dieser leistungsstarken Funktionen uns befähigt, Daten auf Arten zu organisieren und zu analysieren, die einst als unmöglich galten.

Dieses Lab hat nicht nur unsere technischen Fähigkeiten gestärkt, sondern hat auch in uns ein tiefes Verständnis für das bleibende Erbe der Datenmanipulation geweckt. Wenn wir unsere Reise fortsetzen, mögen die hier gelernten Lehren als Leitstern dienen und unseren Weg zu einer immer größeren Beherrschung der Datenkunste erhellen.