【发布时间】:2019-10-29 10:41:10
【问题描述】:
我需要制定客户一周的支出分布。每次客户进行购买时,我都想知道他们在过去一周在我们这里花了多少钱。我想用我的 Hive 代码来做这个。
我的数据集和这个有点类似:
Spend_Table
Cust_ID | Purch_Date | Purch_Amount
1 | 1/1/19 | $10
1 | 1/2/19 | $21
1 | 1/3/19 | $30
1 | 1/4/19 | $11
1 | 1/5/19 | $21
1 | 1/6/19 | $31
1 | 1/7/19 | $41
2 | 1/1/19 | $12
2 | 1/2/19 | $22
2 | 1/3/19 | $32
2 | 1/5/19 | $42
2 | 1/7/19 | $52
2 | 1/9/19 | $62
2 | 1/11/19 | $72
到目前为止,我已经尝试过类似下面的代码:
Select Cust_ID,
Purch_Date,
Purch_Amount,
sum(Purch_Amount) over (partition by Cust_ID order by unix_timestamp(Purch_Date) range between 604800 and current row) as Rolling_Spend
from Spend_Table
Cust_ID | Purch_Date | Purch_Amount | Rolling_Spend
1 | 1/1/19 | $10 | $10
1 | 1/2/19 | $21 | $31
1 | 1/3/19 | $30 | $61
1 | 1/4/19 | $11 | $72
1 | 1/5/19 | $21 | $93
1 | 1/6/19 | $31 | $124
1 | 1/7/19 | $41 | $165
2 | 1/1/19 | $12 | $12
2 | 1/2/19 | $22 | $34
2 | 1/3/19 | $32 | $66
2 | 1/5/19 | $42 | $108
2 | 1/7/19 | $52 | $160
2 | 1/9/19 | $62 | $188
2 | 1/11/19 | $72 | $228
我认为问题出在我的范围之间,因为它似乎在抓取前面的行数。我希望它能够在前面几秒内抓取数据(604800 是 6 天,以秒为单位)。
我正在尝试做的事情可行吗?我不能做前 6 行,因为不是每个客户每天都会购买,就像客户 2 一样。非常感谢任何帮助!
【问题讨论】:
标签: hadoop hive window-functions partition