Hive 基本教程

Hive SQL

Hive 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/hive-sql-collect_set-function.html

Hive SQL 聚合去重函数 COLLECT_SET 详解

Hive SQL 内置函数全解 Hive SQL 内置函数全解


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 VIEWEXPLODE 一起搭配使用,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 并去重后转成数组。