hive表达式不在按键分组中

chn*_*net 13 hive group-by hiveql

我在HIVE中创建了一个表格.它包含以下列:

id bigint, rank bigint, date string
Run Code Online (Sandbox Code Playgroud)

我想每个月获得平均(排名).我可以使用这个命令.有用.

select a.lens_id, avg(a.rank)
from tableA a
group by a.lens_id, year(a.date_saved), month(a.date_saved); 
Run Code Online (Sandbox Code Playgroud)

但是,我也想获得日期信息.我用这个命令:

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);
Run Code Online (Sandbox Code Playgroud)

它抱怨说: Expression Not In Group By Key

Qui*_*nnG 17

完整的错误消息应采用格式Expression Not In Group By Key [value].
[value]会告诉你什么表情,必须在Group By.

只看两个查询,我会说你需要a.date_saved明确添加到Group By.

  • 你是什​​么意思 ?这是 HQL 独有的东西吗?我正在对 MySQL 中的并非所有列进行分组,并且效果很好 (3认同)
  • 是.添加a.date_saved后,它可以正常工作.但是,它没有做我想要的.我想要每月平均(排名).现在它不做平均值.它只显示自a.date_saved添加组以来的所有记录. (2认同)
  • @chnet:您不能选择一列,也不能按该列分组.如果要显示`a.date_saved`,则需要按其分组.您可能能够显示`year(a.date_saved)`和`month(a.date_saved)`,因为它们位于`Group by`但不是100%. (2认同)

van*_*p82 10

四处走动是将附加字段放在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);
Run Code Online (Sandbox Code Playgroud)