Hive SQL中如何对多列进行横向去重计数(忽略空值)
Hive表横向非空字段去重计数
现有Hive表结构及数据如下:
| ID | Column1 | Column 2 | Column 3 |
|---|---|---|---|
| 1 | A | B | C |
| 2 | A | A | B |
| 3 | A | A |
需求:对每行的三列做横向去重计数,统计时忽略空值,最终得到如下结果表:
| ID | Column1 | Column 2 | Column 3 | unique_count |
|---|---|---|---|---|
| 1 | A | B | C | 3 |
| 2 | A | A | B | 2 |
| 3 | A | A | 1 |
解法
可以通过Hive的LATERAL VIEW结合explode函数,将每行的三个字段拆分为多行记录,过滤掉空值后,按原表的行维度分组,使用count(distinct)统计去重后的非空字段数量。
对应的SQL语句如下:
SELECT ID, Column1, `Column 2`, `Column 3`, COUNT(DISTINCT element) AS unique_count FROM your_table_name LATERAL VIEW EXPLODE(ARRAY(Column1, `Column 2`, `Column 3`)) exploded AS element WHERE element IS NOT NULL GROUP BY ID, Column1, `Column 2`, `Column 3`;
说明
ARRAY(Column1,Column 2,Column 3):将每行的三个字段打包成数组LATERAL VIEW EXPLODE(...):把数组拆分成多行,每个字段值对应一条记录WHERE element IS NOT NULL:过滤掉空值COUNT(DISTINCT element):统计分组内(即原表的一行)去重后的非空字段数量
内容的提问来源于stack exchange,提问作者akshay gvs
相关产品推荐
相关产品推荐

