[英]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.