2017-10-30 2 views
0

Ich habe Daten aus einer Bienenstock-Tabelle exportiert. Dann habe ich eine andere Tabelle erstellt, um diese Dateien zu lesen. Meine Hive-Quellentabelle hat ein Array-Feld, das aussieht wie ['9x3', '970x66', '728x90', '970x90', '970x250', '980x300', '1200x300', '970x418']. Mein Ziel externe Bienenstock Tabelle muss auch gleich aussehen. Wenn ich Daten exportiere, hat das Array-Feld '[]' wie erwartet. Da mein Zielfeld jedoch auch ein Array ist, fügt es zusätzliche '[]' hinzu. Ich habe von escaped by verwendet, konnte aber keinen Weg finden, um sowohl die Zeichen '[' 'als auch' '' zu umgehen. Ich habe verwendet:HIVE ESCAPED BY

ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' ESCAPED BY '[' 
    COLLECTION ITEMS TERMINATED BY '\,' 
    MAP KEYS TERMINATED BY ':' 

und versucht, mehrere Versionen wie

ESCAPED BY '[]', 
ESCAPED BY '[|]', 
ESCAPED BY '[,]' 

alle nur das erste Zeichen zu entkommen scheint. Gibt es eine Möglichkeit, mehrere Zeichen zu entkommen, oder eine Möglichkeit, die Array-Felder ohne '[]' Zeichen zu exportieren.regexp_replace und übersetzen Funktionen funktionieren nicht für mich. Dank

Quellenarray
[ '970x66', '728x90', '970x90', '970x250', '980x300', '1200x300', '970x418']

Array Ziel braucht: [ '970x66 ',' 728x90 ',' 970x90 ',' 970x250 ',' 980x300 ',' 1200x300 ',' 970x418 ']

aber es sieht ohne Flucht [' ['970x66', '728x90', '970x90', ‚970x250‘, ‚980x300‘, ‚1200x300‘, ‚970x418‘] ']

Antwort

0

Sie concat_ws(string delimiter, array<string>) verwenden könnte das Array in eine Zeichenfolge zu konvertieren und exportieren, anstatt dieder Verwendung

ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
COLLECTION ITEMS TERMINATED BY '\,' 
MAP KEYS TERMINATED BY ':' 
SELECT 
     rest_of_columns, 
     concat_ws(',',collect_set(cast(arrayfieldname) as string)) as array_field 
FROM 
     yourtable;