时间:2021-07-01 10:21:17 帮助过:140人阅读
在Hive的是用中,我们经常会有这种需求: 按照同一个id进行Group By,然后对另一个字段去重,例如下面得数据: id pic1.jpg2.jpg1.jpg 此时,是用DISTINCT或者2 col得Group By都是不行得,我们可以用这个UDAF:collect_set(col),它将对同一个group by 得ke
在Hive的是用中,我们经常会有这种需求:
按照同一个id进行Group By,然后对另一个字段去重,例如下面得数据:
id pic 1.jpg 2.jpg 1.jpg
此时,是用DISTINCT或者2 col得Group By都是不行得,我们可以用这个UDAF:collect_set(col),它将对同一个group by 得key进行set去重后,转换为一个array。
再举一个例子,我们可以对pic进行去重,拼接:
SELECT id, CONCAT_WS(',', COLLECT_SET(pic)) FROM tbl GROUP BY id
在这里CONCAT_WS是UDF,COLLECT_SET是UDAF,它将group后的pic去重,并转换为了array,方便udf是用。
PS:如果不需要去重,可以使用COLLECT_LIST。
更多UDAF,见这里 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
原文地址:Hive中Group By的去重, 感谢原作者分享。