已通过

cqoc49vn  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(293)

我已经从一个配置单元表导出了数据,然后创建了另一个表来读取这些文件。我的配置单元源表有一个数组字段,看起来像['9x3','970x66','728x90','970x90','970x250','980x300','1200x300','970x418']。我的目标外部Hive表也需要看起来一样。当我导出数据时,数组字段如预期的那样具有“[]”。但是,由于我的目标字段也是一个数组,它会添加额外的“[]”。我使用了转义方式,但找不到同时转义“[”和“]”字符的方法。我用过:

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

并尝试了多种版本,例如

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

似乎只有第一个角色逃脱了一切。是否有任何方法可以转义多个字符,或者导出没有“[]”字符的数组字段。regexp\u replace和translate函数对我不起作用。谢谢
源阵列
['970x66'、'728x90'、'970x90'、'970x250'、'980x300'、'1200x300'、'970x418']
需要目标数组:['970x66','728x90','970x90','970x250','980x300','1200x300','970x418']
但它看起来没有逃逸['['970x66','728x90','970x90','970x250','980x300','1200x300','970x418']]

xqk2d5yq

xqk2d5yq1#

你可以用 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;

相关问题