我已经从一个配置单元表导出了数据,然后创建了另一个表来读取这些文件。我的配置单元源表有一个数组字段,看起来像['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']]
1条答案
按热度按时间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;