蜂巢检查下一行

时间:2016-05-04 08:03:25

标签: sql hadoop hive

我正在编写一个配置单元查询来检查每个用户标识的下一条记录。例如:对于用户ID U1,如果下一条记录的密钥相同(K1),则将该行的classify列更新为手动匹配,但如果用户的下一条记录具有不同的密钥则离开它是空白的

userid category  timestamp              key classify
U1      imported 04-02-2016 05:02:01    k1  NULL
U2      deleted  04-02-2016 05:00:00    k3  NULL
U1      matched  04-02-2016 04:49:00    k1  **manual match**
U4      imported 04-02-2016 04:50:01    k1  NULL
U3      matched  04-02-2016 04:48:00    k2  NULL
U4      matched  04-02-2016 04:47:00    k4  **NULL**

我想从这个

开始
select LEAD(description) OVER (PARTITION BY userid order by timestamp ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) from adithya.smartmatching where subcategory = 'SmartExpense Imported'

然后为classify列实现一个case条件。但我收到上述代码本身的错误。有人可以帮帮我吗?

获取错误:您的查询有以下错误:

您的查询有以下错误: 编译语句时出错:FAILED:SemanticException无法将窗口调用分解为组。至少有一个组必须仅依赖于输入列。还要检查循环依赖性。基础错误:期望函数LEAD的左窗口边界((TOK_TABLE_OR_COL描述))窗口规范= [PartitioningSpec = [partitionColumns = [(TOK_TABLE_OR_COL userid)] orderColumns = [(TOK_TABLE_OR_COL timestamp)ASC]]窗口(start = currentRow,end =范围(1跟随))] _Wcol0是无界的。发现:0

由于

1 个答案:

答案 0 :(得分:1)

您是否在表adithya.smartmatching中创建了分区。如果是,那么您不能使用分区依据 从adithya.smartmatching中选择LEAD(描述)OVER( PARTITION BY 用户ID顺序,按时间戳排列当前行和1后续行),其中subategory =' SmartExpense Imported'

删除分区后(分区)其工作。使用 从adithya.smartmatching中选择LEAD(描述)OVER(PARTITION(userid)顺序,按时间戳排列当前行和1跟随),其中subategory =' SmartExpense Imported'