Hive SQL 提供了数据分组后去重聚合函数 COLLECT_SET
,它可以将分组数据排成列表并组内去重,由于其是聚合函数需要和 GROUP BY
搭配使用。
语法说明
语法
SELECT ..., COLLECT_SET(col) FROM table ... GROUP BY ...
说明
如上中,col 指的是 table 表的要聚合去重处理的字段。
常用例子
提取 struct 数组 array 类型中的某个字段,并转换成去重数组
如题所述,该情况比较复杂,即 array<struct<a:xx, b:xx>>
类型字段中,假设提取 a 字段,并将其聚合去重成一个数组字段,该操作需要 LATERAL VIEW
和 EXPLODE
一起搭配使用,sql 示例代码如下:
SELECT product_id
,COLLECT_SET(menu1_id.menu1_id)
FROM (
SELECT product_id
,t1.menu1_id
FROM xxx.dwd_product_info
LATERAL VIEW EXPLODE(menu1) t1 AS menu1_id
WHERE dp = '20xx-xx-xx'
)
GROUP BY product_id
这里,menu1_id 字段是如上说的 array<struct<menu1_id:int, menu1_name:string>>
类型,提取 menu1_id 并去重后转成数组。