HIVE:计算不同的窗口函数会引发错误

时间:2016-11-24 12:16:31

标签: hadoop hive hiveql

我试图在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

中指定的语法

我究竟做错了什么?

3 个答案:

答案 0 :(得分:1)

两种可能性,

  1. 使用user时,您无法在查询中选择dtdistinct,删除userdt查询将正常运行。< / p>

  2. 您无法在此上下文中使用distinct,如果您在上述查询中删除distinct,则此方法可以正常使用。如果你想采用不同的和它的数量,你可以去下面的子查询,

    select dates.distinct dt from (select dt, count(distinct dt) over(partition by user) as dates FROM table )

  3. 如果有帮助,请告诉我。

答案 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)

另一种解决方案是结合使用sizecollect_set

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