我已从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']']
答案 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;