次のフィールドを持つ BigQuery のテーブルがあります。
time,a,b,c,d
time
は ISO8601 形式の文字列ですが、スペースを含みますa
。 は 1 ~ 16000 の整数で、その他の列は文字列です。テーブルには 1 か月分のデータが含まれており、1 日あたり数百万のレコードがあります。
次のクエリは、「応答が大きすぎます」で失敗します。
select UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) as day,b,c,d,count(a),count(distinct a, 1000000)
from [myproject.mytable]
group by day,b,c,d
order by day,b,c,d asc
ただし、このクエリは機能します (データは 2012 年 1 月 1 日から始まります)。
select UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) as day,
b,c,d,count(a),count(distinct a)
from [myproject.mytable]
where UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) = UTC_USEC_TO_DAY(PARSE_UTC_USEC('2012-01-01 00:00:00'))
group by day,b,c,d
order by day,b,c,d asc
これは、この問題に関連しているようです。ただし、group by
句があるため、一番上のクエリは 2 番目のクエリを繰り返し呼び出すことと同じです。クエリプランナーはこれを処理できませんか?
編集:私のテストデータを明確にするには:
私が生成した偽のテストデータを使用しています。私はもともといくつかのフィールドを使用し、1 か月の時間ごとの要約を取得しようとしました ( 、時間はクエリの一部で使用してgroup by hour
定義されます)。それが失敗したとき、私は毎日に切り替えてみました。それが失敗したとき、関連する列を減らしました。を使用した場合も失敗しましたが、1日分を実行しただけでは機能しました。(パラメーターを削除しても機能しますが、それは1 日クエリで機能するため、クエリ プランナーが期待どおりに物事を分離していないようです。)as
select
count (distinct xxx, 1000000)
1000000
チェックされたもののcount (distinct)
カーディナリティは 16,000 で、group by 列のカーディナリティは 2 と 20 で、合計で 1200 行が予想されます。列の値は非常に短く、約 10 文字です。