2017-10-30 5 views
0

私はハイブテーブルからデータをエクスポートしました。その後、これらのファイルを読み込むために別のテーブルを作成しました。 ハイブソーステーブルには、['9x3'、 '970x66'、 '728x90'、 '970x90'、 '970x250'、 '980x300'、 '1200x300'、 '970x418'のような配列フィールドがあります。 ターゲットの外部ハイブテーブルも同じように見える必要があります。 データをエクスポートすると、配列フィールドの '[]'が予想どおりになります。 しかし、私のターゲットフィールドも配列なので、追加の '[]'が追加されます。 私はエスケープして使ったことがありますが、 '['と ']'の両方の文字をエスケープする方法が見つかりませんでした。 私が使用している:HIVE ESCAPED BY

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

をして、このような

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

として複数のバージョンを試してみました、すべては最初の文字だけをエスケープするようです。 複数の文字をエスケープする方法がありますか、配列フィールドを '[]' characters.regexp_replaceとtranslate関数を使わずにエクスポートする方法はありません。 [ '970×66: おかげ

源アレイ
[ '970×66'、 '728'、 '970×90'、 '970×250'、 '980x300'、 '1200x300'、 '970x418']

、配列を標的とする必要が」、 '728'、 '970×90'、 'の970x250'、 '980x300'、 '1200x300'、 '970x418']

が、それはエスケープせずに見える[ '[' 970×66' 、 '728'、 '970×90' '970x250'、 '980x300'、 '1200x300'、 '970x418'] ']

答えて

0

concat_ws(string delimiter, array<string>)を使用すると、配列を文字列に変換しての代わりにエクスポートできます

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;