2017-12-26 11 views
0

私はこのクエリを実行しました。ここでは完全なBigQueryでワイルドカードテーブルのクエリを高速化するにはどうすればよいですか?

SELECT 
    _TABLE_SUFFIX table_id 
FROM 
    `mydataset.*` 
WHERE 
    _PARTITIONTIME = TIMESTAMP("2017-12-26") 
GROUP BY 
    table_id 

クエリ(71.0s経過し、0 Bが処理)

は、実行計画である:

BigQuery execution plan

私はAましたこれに関する質問のカップル:

  1. このような単純なクエリでは70秒以上かかるのですが、これは正常ですか?
  2. 何か間違っていますか?
  3. とにかくクエリ時間を短縮できますか?
+0

これは一貫していますか、一度だけ起こったのですか?ほとんどの時間は「待機」状態に費やされました –

+0

すべてのデータセットでこのクエリを実行するたびに毎回発生します。 – x97Core

+0

これは異常な動作であるため、ジョブIDを指定する必要があります。同様のクエリは私のために速く動作します。指定されたクエリは実行されません。 –

答えて

1

あなたのクエリは2000+テーブルと一致しました。これらのテーブルのストレージのメタデータを読み取るのに48秒かかりました。これをスピードアップできるかどうかを確認できます。ある意味では、パーティション化された表に対するワイルドカード表は、2レベルのパーティション表がサポートされる前の一時的な回避策です。メタデータは1表対2000+表よりもはるかに小さくなります。

+0

"2レベルのパーティションテーブル"機能が追加されると思いますか? – Sourygna

+0

はい、「2レベルのパーティション表」機能も使用したいと考えています。さらに、このような少量の(メタ)データを読むのがなぜそんなに長くかかるのだろうと私は思っています。これは、BigQueryに「中央」メタデータリポジトリがないことを意味します。 –

+0

Q2またはQ3は、2レベルのパーティション表の概算値です。メタデータの場合、各テーブルのストレージは個別に読み込まれます。私たちはいくつかの並列性を持っていますが、2000+スレッドを同時に読み取ることは間違いありません。 –

関連する問題