当我尝试在sparkSQL中使用PARTITION BY
时,我有这个复杂的查询:
对于当前的每一行,使用user_id,product_id,[create_date-3day,create_date+3day]
作为数据窗口,进行一些数据查询(例如LAST_VALUE()
)。一个关键部分是在查询时,我需要按列ORDER BY NEW_DATE
进行进一步的排序,这样我就可以确保每个窗口中的数据都是按New_date排序的--这是我想要查询的真实的列。
所以一开始我的想法是使用这样的子句,它看起来像这样:LAST_VALUE() over(PARTITION BY user_id,product_id ORDER BY create_date RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING)
个
使用range between与ORDER BY
组合应该可以。但是这里使用order by与range between组合在窗口中进行过滤。我需要进一步的ORDER BY来实现ORDER BY NEW_DATE
。
但这样的查询不起作用:LAST_VALUE() over(PARTITION BY user_id,product_id ORDER BY create_date RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING ORDER BY NEW_DATE)
个
在这个子句中使用两个orderby不会编译。我如何进一步实现这一点?或者有其他方法来实现这一点?
1条答案
按热度按时间9cbw7uwe1#
您可以使用
model
子句为窗口和计算定义不同的计算上下文。请参见下面的代码
字符串
对于此示例数据:
型
返回
型