Hive ETL: Beispiele für das Laden von JSON-, XML- und Textdaten

⚡ Intelligente Zusammenfassung

Hive ETL wandelt Text-, XML- und JSON-Dateien in abfragefähige Tabellen um, indem es sie in Hive lädt und anschließend weiterleitet.tracWerte werden mit xpath() und get_json_object() verglichen, wodurch Analysten eine SQL-Schnittstelle für semistrukturierte Hadoop-Daten erhalten.

  • 🧱 Strukturierte Lasten: Eine durch Trennzeichen getrennte Textdatei wird mit ROW FORMAT DELIMITED plus FIELDS TERMINATED BY in eine Tabelle umgewandelt, dann LOAD DATA LOCAL INPATH.
  • 🏷️ XML extraction: Eine einzelne STRING-Spalte enthält jedes XML-Dokument, und xpath() extrahiert Werte aus den benannten Tags.
  • 🔑 JSON-Beispieltraction: get_json_object() liest pro Aufruf einen JSONPath-Ausdruck, daher benötigt jedes Feld einen eigenen Aufruf.
  • 🪜 Verschachtelte Nutzdaten: Komplexe JSON-Objekte werden auf genau dieselbe Weise geladen, und die Hierarchie wird mit gepunkteten JSONPath-Ausdrücken durchlaufen.
  • 📍 Pfadregeln: Das Schlüsselwort LOCAL liest aus dem Linux-Dateisystem, während das Weglassen des Schlüsselworts den Pfad auf HDFS auflöst.
  • 🎯 Wo es passt: Hive eignet sich eher für Batch-Warehousing und semistrukturierte ETL-Prozesse als für Datensatzabfragen mit geringer Latenz.

Hive ETL: Laden von JSON-, XML- und Textdaten

Hive als ETL- und Data-Warehousing-Tool zusätzlich zu Hadoop Das Ökosystem bietet Funktionalitäten wie Datenmodellierung, Datenmanipulation, Datenverarbeitung und Datenabfrage.traction in Hive bedeutet das Erstellen von Tabellen in Hive und das Laden strukturierter und semistrukturierter Daten sowie das Abfragen von Daten auf der Grundlage der Anforderungen.

Für die Stapelverarbeitung werden wir benutzerdefinierte Skripte mithilfe von Map- und Reduce-Skripten in einer Skriptsprache schreiben. Dies bietet eine SQL wie Umgebung und Unterstützung für einfache Abfragen.

Arbeiten mit strukturierten Daten mit Hive

Strukturierte Daten bedeuten, dass die Daten im richtigen Format mit Zeilen und Spalten vorliegen. Das ist eher so etwas wie RDBMS Daten mit den richtigen Zeilen und Spalten.

Hier laden wir strukturierte Daten aus Textdateien in Hive.

Schritt 1) In diesem Schritt erstellen wir die Tabelle „employees_guru“ mit Spaltennamen wie ID, Name, Alter, Adresse, Gehalt und Abteilung der Mitarbeiter mit Datentypen.

Erstellen der Tabelle employees_guru und Laden der Datei Employees.txt in Hive

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  1. Erstellung der Tabelle „employees_guru“
  2. Daten aus Employees.txt in die Tabelle „employees_guru“ laden

Schritt 2) In diesem Schritt zeigen wir die in dieser Tabelle gespeicherten Inhalte mithilfe des Befehls „Select“ an. Die Tabelleninhalte sind im folgenden Screenshot zu sehen.

Select-Abfrageausgabe, die Zeilen der Hive-Tabelle employees_guru anzeigt

Beispielcode-Ausschnitt

Durchzuführende Abfragen

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

Arbeiten mit semistrukturierten Daten mithilfe von Hive (XML, JSON)

Hive führt ETL-Funktionalitäten im Hadoop-Ökosystem aus, indem es als … fungiert. ETL-ToolDie Durchführung von MapReduce kann in manchen Anwendungsbereichen schwierig sein; Hive kann diese Komplexität reduzieren und bietet die beste Lösung für IT-Anwendungen im Bereich Data Warehousing.

Semistrukturierte Daten wie XML und JSON lassen sich mit Hive einfacher verarbeiten. Zunächst sehen wir uns an, wie wir Hive für Folgendes verwenden können: XML.

XML zu Hive-Tabelle

Dabei laden wir XML-Daten in Hive-Tabellen und rufen die in den XML-Tags gespeicherten Werte ab.

Schritt 1) Erstellung der Tabelle „xmlsample_guru“ mit einer str-Spalte vom Datentyp String.

Die Tabelle xmlsample_guru wird erstellt und die Datei test.xml in Hive geladen.

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  1. Erstellung der Tabelle „xmlsample_guru“
  2. Daten aus der test.xml in die Tabelle „xmlsample_guru“ laden

Schritt 2) Verwendung der XPath Mit der Methode xpath() können wir die in XML-Tags gespeicherten Daten abrufen.

xpath()-Abfrage, die die Werte ename und esal aus der XML-Spalte zurückgibt

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  1. Mithilfe der xpath()-Methode rufen wir die unter /emp/esal/ und /emp/ename/ gespeicherten Werte ab.
  2. Werte innerhalb von XML-Tags. In diesem Schritt zeigen wir die tatsächlichen Werte an, die in der Tabelle „xmlsample_guru“ unter den XML-Tags gespeichert sind.

Beachten Sie, dass xpath() ein Array von Zeichenketten zurückgibt; xpath_string(), xpath_int() und xpath_double() geben einen einzelnen typisierten Wert zurück.

Schritt 3) In diesem Schritt rufen wir das unformatierte XML der Tabelle „xmlsample_guru“ ab und zeigen es an.

Roh-XML-Dokumente, gespeichert in der Spalte „str“ von xmlsample_guru

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  • Die tatsächlichen XML-Daten werden mit Tags angezeigt
  • Wenn wir ein einzelnes Tag betrachten, dann ist es das „emp“ als übergeordnetes Tag mit „ename“ und „esal“ als untergeordneten Tags.

Code Ausschnitt:

Durchzuführende Abfragen

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

JSON (JavaSkriptobjektnotation)

Daten aus sozialen Medien und von Websites werden üblicherweise im JSON-Format gespeichert. Beim Abrufen von Daten von Online-Servern werden JSON-Dateien zurückgegeben. Mithilfe von Hive als Datenspeicher können wir JSON-Daten durch die Erstellung von Schemas in Hive-Tabellen laden.

JSON zu Hive-Tabelle

Hierbei laden wir JSON-Daten in Hive-Tabellen und rufen die im JSON-Schema gespeicherten Werte ab.

Schritt 1) In diesem Schritt erstellen wir eine JSON-Tabelle mit dem Namen „json_guru“. Sobald diese erstellt ist, laden und zeigen wir den Inhalt des eigentlichen Schemas an.

json_guru wird erstellt, test.json wird geladen und das JSON-Schema wird angezeigt

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  1. Erstellung der Tabelle „json_guru“
  2. Daten aus test.json in die Tabelle „json_guru“ laden
  3. Anzeige des tatsächlichen Schemas der in der Tabelle json_guru gespeicherten JSON-Datei

Schritt 2) Mit der Methode get_json_object() können wir die in der JSON-Hierarchie gespeicherten Datenwerte abrufen.

Die Ausgabe von get_json_object() listet ecode, ename und salary von json_guru auf.

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  1. Mit `get_json_object(str,'$.ecode')` lassen sich die Werte für `ecode` aus der Tabelle `json_guru` abrufen. Analog dazu können mit `get_json_object(str,'$.ename')` und `get_json_object(str,'$.sal')` die Werte für `ename` und `sal` aus derselben Tabelle abgerufen werden.
  2. Werte, die innerhalb der JSON-Hierarchie in json_guru gespeichert sind

Da get_json_object() das Dokument einmal pro Aufruf analysiert, ist json_tuple() günstiger, wenn mehrere Schlüssel benötigt werden, und ein JSON SerDe ordnet das Dokument zur Ladezeit typisierten Spalten zu.

Code Schnipsel

Durchzuführende Abfragen

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

Komplexe JSON-Daten in Hive-Tabelle

Hierbei laden wir komplexe JSON-Daten in Hive-Tabellen und rufen die im JSON-Schema gespeicherten Werte ab.

Schritt 1) Erstellung von complexjson_guru mit einem einzelnen Spaltenfeld.

Erstellung von complexjson_guru und Laden von emp.json in die Hive-Tabelle

Aus dem obigen Screenshot lässt sich Folgendes erkennen:

  1. Erstellung der Tabelle complexjson_guru mit einem einzelnen Spaltenfeld vom Datentyp String
  2. Daten aus der komplexen JSON-Datei emp.json in complexjson_guru laden

Schritt 2) Mit get_json_object können wir den eigentlichen Inhalt abrufen, der in der JSON-Dateihierarchie gespeichert ist.

Im folgenden Screenshot ist die Ausgabe der in complexjson_guru gespeicherten Daten zu sehen.

ExtracTed-Ecode und verschachtelte Schlüsselwerte aus dem komplexen JSON-Dokument

Schritt 3) In diesem Schritt können wir mithilfe des Befehls „Select“ die in der Tabelle „complexjson_guru“ gespeicherten komplexen JSON-Daten anzeigen.

Wählen Sie die Ausgabe, die die rohen komplexen JSON-Zeilen in complexjson_guru anzeigt.

Beispielcode-Ausschnitt

Durchzuführende Abfragen

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

Hive in Echtzeitprojekten – Wann und wo man es einsetzt

Wann und wo sollte Hive im Hadoop-Ökosystem eingesetzt werden?

Wenn die Funktion

  • Bei der Arbeit mit leistungsstarken statistischen Funktionen im Hadoop-Ökosystem
  • Bei der Verarbeitung strukturierter und semistrukturierter Daten
  • Als Data-Warehouse-Tool mit Hadoop
  • Echtzeit-Datenerfassung mit HBase, wobei Hive verwendet werden kann

COHO Expo bei der

  • Für einfache Bedienbarkeit als ETL- und Data-Warehousing-Tool
  • Um eine SQL-ähnliche Umgebung bereitzustellen und Abfragen wie mit SQL mithilfe von HiveQL durchzuführen
  • Um benutzerdefinierte Map- und Reducer-Skripte für spezifische Kundenanforderungen zu verwenden und bereitzustellen

Häufig gestellte Fragen

LOCAL kopiert die Datei vom Dateisystem des Client-Rechners. Ohne LOCAL behandelt Hive den Pfad als HDFS-Pfad und verschiebt die Datei, sodass ein relativer Pfad im HDFS-Home-Verzeichnis des Benutzers aufgelöst wird.

`json_tuple()` ist in der Regel schneller: Es analysiert das Dokument einmal und gibt mehrere Schlüssel zusammen zurück, während `get_json_object()` die Zeichenkette für jedes Feld neu analysiert. Verwenden Sie `get_json_object()` für einen einzelnen Wert.

Nein. Eine einzelne STRING-Spalte plus die JSON-Funktionen funktionieren. Ein SerDe wie org.apache.hive.hcatalog.data.JsonSerDe eignet sich für wiederholte Produktionsabfragen.ping Die Tasten werden nur einmalig auf die eingegebenen Spalten angewendet, anstatt bei jedem Lesevorgang.

Normalerweise handelt es sich um eine formatierte Datei: Hive erwartet ein vollständiges JSON-Dokument pro Zeile. Ein über mehrere Zeilen verteiltes Dokument führt daher zu ungültigen Zeilen. Dasselbe gilt für einen falsch geschriebenen Schlüssel oder eine falsche Groß-/Kleinschreibung im JSONPath.

Die Funktion `xpath()` gibt immer ein Array von Strings zurück. Verwenden Sie stattdessen eine typisierte Variante: `xpath_string()`, `xpath_int()`, `xpath_long()`, `xpath_float()`, `xpath_double()` oder `xpath_boolean()`. Jede dieser Funktionen gibt einen Skalar des entsprechenden Typs zurück.

Externe Daten sind für Rohlandedaten sicherer, da sie verloren gehen.ping Die Tabelle lässt die Dateien an ihrem Platz. Eine verwaltete Tabelle löscht ihr Datenverzeichnis beim DROP – praktisch für temporäre Tabellen, aber zerstörerisch für gemeinsam genutzte Dateien.

Maschinelle Lernwerkzeuge analysieren Beispieldateien, um Dateitypen abzuleiten, spärliche Schlüssel zu kennzeichnen und Partitionsspalten anhand von Abfragemustern vorzuschlagen. Betrachten Sie die Ausgabe als Entwurf – Dateitypen und Partitionen müssen noch anhand realer Datenträger überprüft werden.

Es generiert CREATE TABLE-Anweisungen, LOAD DATA-Befehle und JSONPath-Ausdrücke anhand eines in den Editor eingefügten Beispieldatensatzes. Da es den Cluster nicht erkennen kann, müssen Namen, Pfade und die Schreibweise von Schlüsseln vorher überprüft werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: