hive:count distinct window函数抛出错误

tag5nh1u  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(624)

我正在尝试在配置单元中使用窗口函数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'

我想我使用的是hive语言手册中指定的语法
我到底做错了什么?

0ve6wy6x

0ve6wy6x1#

另一个解决方案是结合使用 size 以及 collect_set :

select 
  user,
  dt,
  size(collect_set(dt) over(partition by user)) as dates
from
  table
ni65a41a

ni65a41a2#

两种可能性,
您不能选择 user 以及 dt 在查询中使用 distinct ,删除 user 以及 dt 查询将正常工作。
你不能使用 distinct 在这种情况下,如果删除 distinct 在上面的查询中,这可以正常工作。如果你想取distinct和它的计数,你可以进行如下的子查询, select dates.distinct dt from (select dt, count(distinct dt) over(partition by user) as dates FROM table ) 如果这有帮助,请告诉我。

6rqinv9w

6rqinv9w3#

下面的解决方案将像count distinct一样工作。稠密秩函数将给出分区中不同c的秩。最高密秩数将是c的不同条目数。由于执行了两个窗口功能,没有安静是最好的执行方式,但对我来说,这是唯一的方式让它在Hive<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

相关问题