2016-11-24 54 views
0

我想在配置单元中使用不同的窗口函数计数,并获取错误。HIVE:计数截然不同的窗口函数抛出错误

使用的查询如下:

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

您需要在查询中添加group by子句才能使用count之类的聚合函数。 – Bhavesh

+0

我想使用计数不同作为窗口函数,而不是作为一个常规函数。给一个群组工作,但它作为一个常规函数运行,忽略了'over(按用户分区)'部分。 –

回答

1

两种可能性,

  1. 使用distinct时,您不能在查询中选择userdt,删除userdt查询将正常工作。

  2. 在这种情况下,您不能使用distinct,如果您在上述查询中删除distinct,这将工作正常。如果你想利用不同的,其计,你可以去像下面的子查询,

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

让我知道,如果这有助于。

+0

这些建议有帮助,但他们需要额外的子查询或连接。我希望使用窗口函数获取数据,以便查询可以更快。但是现在我不确定配置单元是否支持统计不同的窗口函数。 –

+0

它支持它..但你不能选择任何其他列。 –

+0

但是,如果我无法选择任何其他列,我可以使用明显的计数明确的权利?窗口统计独特功能提供什么优势 –

0

以下解决方案将像计数截然不同。 密集排名函数将给出分区内不同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