2016-05-31 3 views
0

Ich habe die unten Daten in einem meiner oracle db Tabellen -Get Spalten getrennte Werte in verschiedene Reihen mit Sqoop und hive

ZONE_ID,ZONE_NAME,OPERATORS,GEOGRAPHIES,PRODUCT_ID 
3285,'EUROPE',null,'3,6,14,21,32',2 
3293,'USA AND MEXICO',null,'133,215',3 
3061,'Europe','11,238,352,398',null,4 
3221,'USA','1079',null,5 

In Operatoren und Geografien Spalten, Daten durch Komma getrennt. Für jede Zeile sind Daten entweder in der Spalte operators oder in der Spalte geographies vorhanden.

Ich brauche diese begrenzten Daten in separaten Zeilen zu erhalten, wie unten:

ZONE_ID,ZONE_NAME,OPERATORS,GEOGRAPHIES,PRODUCT_ID 
3285,'EUROPE',null,3,2 
3285,'EUROPE',null,6,2 
3285,'EUROPE',null,14,2 
3285,'EUROPE',null,21,2 
3285,'EUROPE',null,32,2 
3293,'USA AND MEXICO',null,133,3 
3293,'USA AND MEXICO',null,215,3 
3061,'Europe',11,null,4 
3061,'Europe',238,null,4 
3061,'Europe',352,null,4 
3061,'Europe',398,null,4 
3221,'USA',1079,null,5 

Ist diese Umwandlung möglich während Sqoop Import von oracle db? Sonst wie können wir diese Daten mit sqoop importieren und diese Transformation in Hive durchführen.

Bitte helfen.

+0

** 1 ** Importieren der Daten in HDFS Textdateien, aber stellen Sie sicher Sqoop einen anderes Feld Separator verwendet (nur vorsichtig sein, ein einfaches ASCII-Zeichen verwenden zB ';' oder '|') ** 2. ** Erstellen Sie eine Hive "EXTERNAL" -Tabelle für die Textdateien, definieren Sie explizit das Feldtrennzeichen (was Sie für Sqoop setzen) und das Array-Trennzeichen (Komma) und definieren Sie GEOGRAPHIES als Typ ARRAY ** 3. ** "explode" das Array innerhalb eines SELECT cf. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-explode –

+0

@Samson Scharrichter Ich dachte über das Gleiche nach. Sie müssen jedoch sowohl die Operatoren als auch die Geographiespalten auswerten, da beide über abgegrenzte Daten verfügen. Basis Für jede Zeile sind die Daten entweder in der Spalte operators oder geographies. Wie wird explodieren auf beiden Spalten gleichzeitig arbeiten? Vielen Dank. – prashant1988

+1

'explode' auf mehreren Spalten führt zu partiellen kartesischen Produkten; In Ihrem Fall spielt das keine Rolle, da Sie nie Daten in beiden Spalten haben. In anderen Fällen, wenn Sie X [1] und Y [1], X [2] und Y [2] usw. angleichen müssen, müssten Sie "posexplode" machen und die nicht übereinstimmenden Datensätze aussortieren (zB X [1] und Y [2]) in einer weiteren WHERE-Klausel - nicht sehr effizient, aber es funktioniert. –

Antwort

0

Verstanden mit folgenden Abfrage in Bienenstock arbeiten.

select ZONE_ID 
,ZONE_NAME 
,col1 
,col2 
,product_id 
from table 
lateral view explode(OPERATORS) ptable1 as col1 
lateral view explode(GEOGRAPHIES) ptable2 as col2 
; 
Verwandte Themen