繁体   English   中英

如何在 hive 中生成 MTD(月至今)滚动总和?

[英]How to generate MTD (Month to Date) rolling sum in hive?

我预计以前可能有人问过这个问题,但不知何故我找不到任何东西。 请让我知道这是否重复。

所以假设我有一个格式如下的表格

| event_date | v |
|------------+---|
| 2021-01-01 | 1 |
| 2021-01-02 | 1 |
| .......... | . |
| 2021-01-31 | 1 |
| 2021-02-01 | 1 |
| 2021-02-02 | 1 |

我想计算每个月内的滚动总和。 所以 output 将是这样的(假设所有行的v=1 ):

| event_date | v | cum_v |
|------------+---+-------|
| 2021-01-01 | 1 |     1 |
| 2021-01-02 | 1 |     2 |
| .......... | . |     . |
| 2021-01-31 | 1 |    31 |
| 2021-02-01 | 1 |     1 |
| 2021-02-02 | 1 |     2 |

这类似于计算滚动 30 天的总和,但它是滚动 1 个月。

我认为这可以使用 hive 的 window function 和interval命令来完成,但无法在interval命令上找到任何有用的文档。 我也期待进行 QTD 和 YTD 汇总,因此希望以灵活的方式进行。

使用分析 function 按 substr(event_date, 1,7) order by event_date 分区:

select sum(v) over (partition by substr(event_date, 1,7) order by event_date) as rolling_sum

您想要一个如下所示的累积总和:

select t.*,
       sum(val) over (partition by year(event_date), month(event_date)
                      order by event_date
                     ) as mtd
from t;

这很容易推广到 YTD 和 QTD。

或者,如果您喜欢更短的形式:

       sum(val) over (partition by last_day(event_date)
                      order by event_date
                     ) as mtd

我强烈建议您在日期列上使用日期函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM