问题描述
我想按会话ID的出现次数对其进行排名,因此第一个出现的事件排名为1,第二个出现的事件排名为2,第三个为3,依此类推。
我遇到语法错误,因此很可能出现了问题
select
conversationid,rank() over (partition by conversationid order by count(*) desc) as rnk
from my_table
group by conversationid
编译语句时出错:失败:SemanticException无法将窗口调用分解为组。至少1组必须仅取决于输入列。还要检查循环依赖性。潜在错误:org.apache.hadoop.hive.ql.parse.SemanticException:行7:54 UDAF'count'尚不支持的地方
解决方法
如果要按对话计数对对话进行排名,则不要在窗口函数中使用partition by
子句:
select conversationid,rank() over(order by count(*) desc) rnk
from mytable
group by conversationid
这会将排名1
分配给最频繁的会话。