我试图在hive中使用窗口函数count distinct,并获得错误。
使用的查询如下:
select user, dt, count(distinct dt) over(partition by user) as dates
FROM table
它会抛出以下错误:
FAILED: SemanticException [Error 10025]: Line 1:123 Expression not in GROUP BY key 'user'
我认为我正在使用配置单元language manual
中指定的语法我究竟做错了什么?
答案 0 :(得分:1)
两种可能性,
使用user
时,您无法在查询中选择dt
和distinct
,删除user
和dt
查询将正常运行。< / p>
您无法在此上下文中使用distinct
,如果您在上述查询中删除distinct
,则此方法可以正常使用。如果你想采用不同的和它的数量,你可以去下面的子查询,
select dates.distinct dt from (select dt, count(distinct dt) over(partition by user) as dates
FROM table )
如果有帮助,请告诉我。
答案 1 :(得分:1)
以下解决方案将像计数一样有效。 密集等级函数将给出分区内不同c的等级。 密度最高的等级数将是c的不同条目的数量。 由于执行两个窗口函数,没有安静的最佳表现方式,但对我来说,这是让它在Hive&lt; 2.1.0上工作的唯一方法。
select src.a, src.b, src.c, max(src.cnt_dens_rank) over ( PARTITION BY src.a, src.b) as cnt_distinct
from
(
select a, b, c, DENSE_RANK ( ) OVER (PARTITION BY a, b order by c) cnt_dens_rank
) src
答案 2 :(得分:0)
另一种解决方案是结合使用size
和collect_set
:
select
user,
dt,
size(collect_set(dt) over(partition by user)) as dates
from
table