簡體   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