【问题标题】:Grouping based on multiple columns and finding max value in each group in Hive基于多列分组并在 Hive 中的每个组中查找最大值
【发布时间】:2018-01-03 13:58:23
【问题描述】:

我有一个包含 3 列的配置单元表 hive_tab:

+---------------------+
|   date   |id | desc |
+---------------------+
|2017-05-31|100| high |
|2017-05-30|202| high |
|2017-05-31|102|medium|
|2017-05-31|102|medium|
|2017-05-31|102|  low |
|2017-05-31|101|  low |
|2017-05-30|201|medium|
|2017-05-31|100| high |
|2017-05-31|100|  low |
|2017-05-31|100| high |
|2017-05-30|200|  low |
|2017-05-30|201|medium|
|2017-05-30|201|medium|
|2017-05-30|202| high |
|2017-05-30|201| high |
|2017-05-30|201|  low |
|2017-05-30|201|  low |
|2017-05-30|202|medium|
+---------------------+

预期输出是:

+----------------------------------+
|   date   |id | desc | count_desc |
+----------------------------------+
|2017-05-31|100| high |     3      |
|2017-05-31|101|  low |     1      |
|2017-05-31|102|medium|     2      |
|2017-05-30|200|  low |     1      |
|2017-05-30|201|medium|     3      |
|2017-05-30|202| high |     2      |
+----------------------------------+

数据是: Perday(date) 可以有任意数量的 ID。每个 ID 将有任意数量的 desc,如 high、medium、low。

我们想要预期输出中提到的每个 id 每天出现频率最高的 desc。

已经尝试过以下查询:

select A.date,A.id,A.desc,max(c)
from(
select date,id,desc,count(desc) c
from hive_tab group by date,id,desc)A
group by id,c,date,desc;

但输出不如预期。它每天为每个 id 提供所有 desc,而不是每个 id 每天只提供最频繁出现的 desc。

任何建议都会有帮助。

谢谢

【问题讨论】:

标签: group-by hive max


【解决方案1】:

从 group by 子句中删除 desc,因为您想要每组日期和 id 的最大值。

select A.date,A.id,max(c)
from
(
   select date,id,desc,count(desc) c
   from hive_tab 
   group by date,id,desc
) A
group by A.date,A.id;

使用 row_number() 和分区

select * from 
(
   select 
        date,
        id,
        desc,
        max(desc) over (partition by date,id,desc) as max_desc,
        row_number() over (partition by date,id,desc order by max_desc desc) as row_no
   from hive_tab
) res 
where res.row_no = 1

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2021-05-23
    • 2021-12-20
    • 2020-05-25
    • 2013-10-24
    • 2018-03-12
    相关资源
    最近更新 更多