我有下表,其中包含重复的id上的数组的值为每个id,我想找出每个id的唯一值,如何做到这一点?
CREATE TABLE test( id string, values array<string>)
当我在下面运行命令时,它抛出错误 collect_set 仅支持基元类型值。
collect_set
select id, collect_set(values) from ts group by id;
错误:失败:udfargumenttypeexception仅接受基元类型参数,但数组作为参数1传递。
5lwkijsr1#
解决此问题的另一种非正式方法,特别是在具有许多groupby和collect\集的嵌套查询中,是使用concat\ ws(“,values)将数组连接到一个字符串中。
select id, collect_set(concat_ws("", values)) from ts group by id;
u3r8eeie2#
正如错误信息所说 Only primitive type arguments are accepted but array was passed as parameter 1. ,使用前需要将数组转换为字符串。你可以通过使用 explode() 功能。比如:
Only primitive type arguments are accepted but array was passed as parameter 1.
explode()
select id, collect_set(tokens) FROM ts LATERAL VIEW explode(values) x AS tokens group by id;
我希望这对你有帮助。
2条答案
按热度按时间5lwkijsr1#
解决此问题的另一种非正式方法,特别是在具有许多groupby和collect\集的嵌套查询中,是使用concat\ ws(“,values)将数组连接到一个字符串中。
u3r8eeie2#
正如错误信息所说
Only primitive type arguments are accepted but array was passed as parameter 1.
,使用前需要将数组转换为字符串。你可以通过使用
explode()
功能。比如:我希望这对你有帮助。