我有一个如下表
CREATE TABLE $NAMESPACE.artist_seed_to_albums_nn(
id STRING,
vals MAP<STRING, FLOAT>
)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
stored as textfile
..
所以,一行就像
"foo" \t {"foo": 0.2, "bar":0.6}
我想将地图转换为类似字符串
"foo" \t "foo:02,bar:0.6"
答案 0 :(得分:0)
不使用第三方UDF的简单方法是将表DDL中的列定义为STRING:
vals string
然后,您可以在选择期间从字符串中删除多余的字符["{}]
:
select select regexp_replace(vals,'["{}]','') as vals
您还可以使用Brickhouse to_json将任意Hive结构转换为JSON字符串。然后,删除多余的字符。
第一种方法更好,因为vals列值将被SerDe反序列化为STRING(按原样),不需要其他转换。