web-dev-qa-db-ja.com

キーでグループ化されていないハイブ式

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

13
chnet

エラーメッセージ全体はExpression Not In Group By Key [value]の形式である必要があります。
[value]は、Group Byに必要な式を通知します。

2つのクエリを見ただけで、a.date_savedGroup Byに明示的に追加する必要があると思います。

16
QuinnG

ウォークアラウンドは、追加フィールドを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);
11
vanship82

これは、グループの下に複数の「date_saved」レコードがあるためです。これらの「date_saved」レコードを配列に変換して出力できます。

0
Y.Wang