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
エラーメッセージ全体はExpression Not In Group By Key [value]
の形式である必要があります。[value]
は、Group By
に必要な式を通知します。
2つのクエリを見ただけで、a.date_saved
をGroup By
に明示的に追加する必要があると思います。
ウォークアラウンドは、追加フィールドを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);
これは、グループの下に複数の「date_saved」レコードがあるためです。これらの「date_saved」レコードを配列に変換して出力できます。