如何在Hive中将地图转换为字符串

时间:2019-09-06 23:21:47

标签: hive hiveql

我有一个如下表

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"

1 个答案:

答案 0 :(得分:0)

不使用第三方UDF的简单方法是将表DDL中的列定义为STRING:

vals string

然后,您可以在选择期间从字符串中删除多余的字符["{}]

select select regexp_replace(vals,'["{}]','') as vals

您还可以使用Brickhouse to_json将任意Hive结构转换为JSON字符串。然后,删除多余的字符。

第一种方法更好,因为vals列值将被SerDe反序列化为STRING(按原样),不需要其他转换。