Hive表达式不在分组键中

14

我在HIVE中创建了一个表。

它有以下列:

id bigint, rank bigint, date string

我想要获取每月的平均排名。我可以使用这个命令。它有效。

select a.lens_id, avg(a.rank)
from tableA a
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

然而,我还想获取日期信息。 我使用这个命令:

select a.lens_id, avg(a.rank), a.date_saved
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);

提示错误: Expression Not In Group By Key

3个回答

16
完整的错误信息应该是以 Expression Not In Group By Key [value] 的格式呈现。
其中[value]会告诉你需要在 Group By 中添加哪个表达式。
仅仅看这两个查询语句,我认为你需要将a.date_saved 明确地添加到 Group By 中。

3
是的。添加了a.date_saved后可以运行,但它并没有达到我的预期。我想要每个月的rank平均值,但现在它不能进行平均。它只是在添加了group by a.date_saved后显示了所有的记录。 - chnet
3
如果你想显示 a.date_saved,那么你需要以它为分组依据,不能只选择该列而不进行分组。可能可以显示 year(a.date_saved)month(a.date_saved),因为它们在“Group by”中,但不能保证100%能够实现。 - QuinnG
谢谢。我可以显示年(a.date_saved)和月(a.date_saved)。 - chnet
4
你的意思是什么?这是 HQL 特有的东西吗?我在 MySQL 中使用了不包含全部列的 GROUP BY 子句,它也能正常工作。 - Omer Anisfeld
使用 collect_set()[0] 进行修复。 - Yin

14

将附加字段放入collect_set中,并返回集合的第一个元素可以实现漫游。例如:

select a.lens_id, avg(a.rank), collect_set(a.date_saved)[0]
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);

0
这是因为在您的分组中有多个“date_saved”记录。您可以将这些“date_saved”记录转换为数组并输出它们。

这篇帖子似乎没有为问题提供一个高质量的答案。请编辑您的答案并可能展示一个例子,或者将其作为评论发布到问题中。 - sɐunıɔןɐqɐp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接