Explodieren einer Zeile mit XML-Daten in Hive

8

Wir haben XML-Daten in Hadoop als einzelne String-Spalte mit dem Namen XML geladen. Wir versuchen, auf Datenniveaus zu normalisieren oder es in einzelne Zeilen für die Verarbeitung zu explodieren (Sie wissen, wie eine Tabelle!) Haben explodierte Funktion versucht, aber nicht genau, was wir wollen.

SAMPLE XML

%Vor%

QUERY 1

Wir fragen die höherstufige Report.Id ab und dann die ID und den Namen des Kindes (Locations / Location). Das Folgende gibt uns im Wesentlichen ein kartesisches Produkt aller möglichen Kombinationen (in diesem Beispiel 8 Zeilen statt der 4, die wir erhoffen.)

%Vor%

ABFRAGE 2

Versucht, in eine Struktur zu gruppieren und dann zu explodieren, aber dies liefert zwei Zeilen und zwei Arrays.

%Vor%

Ergebnisse

%Vor%

Was wir wollen

%Vor%

Scheint wie eine gemeinsame Sache zu wollen, kann aber keine Beispiele finden. Jede Hilfe wird sehr geschätzt.

    
Jim Barnett 13.03.2013, 00:44
quelle

1 Antwort

3

Ich sehe zwei Möglichkeiten, um dieses Problem zu lösen.

  1. Erstellen Sie benutzerdefinierte UDF, die ein XML-Element parsen und das von Ihnen benötigte Array zurückgeben. Danach explodieren Array.

  2. Verwenden Sie Subselects.

Ich habe die Lösung 2 mit Subselects implementiert. Selbst wenn Subsects verwendet werden, ist Hive "schlau genug", um nur einen Map-Reduce-Job dafür zu erstellen. Daher denke ich, dass es keine Performance-Probleme geben wird.

%Vor%

Nachdem Sie diese Abfrage für die von Ihnen angegebene XML-Datei ausgeführt haben, habe ich Ergebnisse erhalten, nach denen Sie suchen

%Vor%

Hoffe das löst dein Problem.

Grüße, Dino

    
dino.keco 07.05.2013 12:08
quelle

Tags und Links