Spark SQLのようなクエリがあります
_select count(ts), truncToHour(ts)
from myTable
group by truncToHour(ts).
_
ts
がタイムスタンプタイプである場合、truncToHour
はタイムスタンプを時間に切り捨てるUDFです。このクエリは機能しません。やってみると
_select count(ts), ts from myTable group by truncToHour(ts)
_
expression 'ts' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() if you don't care which value you get.;
を取得しましたが、次の場合はfirst()
が定義されていません。
_select count(ts), first(ts) from myTable group by truncToHour(ts)
_
とにかく、サブクエリを使用せずに必要なものを取得するには?また、なぜ「wrap in first()」と表示されているのに、first()
が定義されていないのですか?
私は解決策を得ました:
SELECT max(truncHour(ts)), COUNT(ts) FROM myTable GROUP BY truncHour(ts)
または
SELECT truncHour(max(ts)), count(ts) FROM myTable GROUP BY truncHour(ts)
より良い解決策はありますか?
https://issues.Apache.org/jira/browse/SPARK-921
実際の関数はfirst_valueのようです。