我在下面的表中包含id的重复项,每个id都包含值数组,我想找出每个id的唯一值,该怎么做?
CREATE TABLE test(
id string,
values array<string>)
当我在命令下运行时,它会抛出错误,因为collect_set
仅支持原始类型值。
select id, collect_set(values) from ts group by id;
错误:
FAILED:UDFArgumentTypeException只有基本类型参数 接受,但数组作为参数1传递。
答案 0 :(得分:3)
正如错误消息显示Only primitive type arguments are accepted but array was passed as parameter 1.
,您需要在使用之前将数组转换为String。
您可以使用explode()
功能实现相同的功能。类似的东西:
select
id,
collect_set(tokens)
FROM
ts LATERAL VIEW explode(values) x AS tokens
group by
id;
我希望这会对你有所帮助。
答案 1 :(得分:0)
解决此问题的另一种非正式方法,特别是在具有许多group by和collect_set的嵌套查询中,是使用 concat_ws(&#34;&#34;,值)将数组连接成一个字符串
select id, collect_set(concat_ws("", values)) from ts group by id;