艾滋病病毒被

时间:2017-10-30 15:49:56

标签: arrays hive escaping adobe-brackets

我已从hive表中导出数据。然后我创建了另一个表来读取这些文件。 我的hive源表有一个数组字段,看起来像[' 9x3',' 970x66'' 728x90',' 970x90',&# 39; 970x250的'' 980x300'' 1200x300''至970x418&#39]。 我的目标外部蜂巢表也需要看起来一样。 当我导出数据时,数组字段有' []'正如所料。 但是,由于我的目标字段也是一个数组,它会添加额外的' []'。 我曾经使用逃脱,但无法找到逃避两者的方法。['和']'字符。 我用过:

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函数不适合我。 感谢

源阵列
[' 970x66的'' 728x90的'' 970x90的'' 970x250的'' 980x300',' 1200x300''至970x418']

需要目标数组:[' 970x66',' 728x90',' 970x90',' 970x250',' 980x300&# 39;,' 1200x300''至970x418']

但它看起来没有逃脱[' [' 970x66',' 728x90',' 970x90',' 970x250', ' 980x300'' 1200x300''至970x418']']

1 个答案:

答案 0 :(得分:0)

您可以使用concat_ws(string delimiter, array<string>)将数组转换为字符串并导出而不是使用ESCAPED BY

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;