我在 hive 里工作,
我有这样一个数据集:
client_id date nb_pts
1 2016-06-01 1
1 2016-06-02 3
1 2016-06-03 4
2 2016-06-01 2
2 2016-06-02 3
我需要为每个客户机输出,当前nbu pts和以前nbu pts之间的差异。所以我的输出应该是:
client_id date nb_pts nb_pts_per_row
1 2016-06-01 1 1 (1-0)
1 2016-06-02 3 2 (3-1)
1 2016-06-03 4 1 (4-3)
2 2016-06-01 2 2 (2-0)
2 2016-06-02 3 1 (3-2)
我试过在hive中使用lag函数:
SELECT client_id, date, nb_pts,
nb_pts - (LAG(nb_pts, 1, 0) OVER (PARTITION BY client_id ORDER BY date ROWS 1 PRECEDING)) as nb_pts_per_row
FROM MyTable
但是验证失败了。上面写着:
未能将窗口调用拆分为组。至少有一个组只能依赖于输入列。还要检查循环依赖关系。基本错误:函数lag需要左窗口帧边界((tok\u table\u or \u col nb\u pts),1,0)org.apache.hadoop.hive.ql.parse。windowingspec$windowspec@27a007cd 作为lag\u window\u 0是无界的。
编辑(解决方案):
因此它在没有行1的情况下工作:
SELECT client_id, date, nb_pts,
nb_pts - (LAG(nb_pts, 1, 0) OVER (PARTITION BY client_id ORDER BY date)) as nb_pts_per_row
FROM MyTable
暂无答案!
目前还没有任何答案,快来回答吧!