1

25 のパーティション (それぞれ 40m) のユニオンと 1 つの完全なテーブルに ~10 億行あります。個別のカウントを計算するクエリを実行すると、通常は 1 ~ 4 のパーティションでデータが検索されます。(クエリは動的です) where 句に基づいています。同じクエリがすべてのテーブルの結合で 30 秒実行されるのに対し、テーブル全体では 50 秒実行されます。同じ GB が処理されます。まず第一に、優れたパフォーマンス:-) 質問は次のとおりです。パーティションテーブルは常に高速ですか? 2. 使用するパーティションが少ない場合、同じ GB に対して請求されるのはなぜですか? これは、適切なパーティションを選択するためにクエリを動的に構築する必要があることを意味します...これは負担です。(あなたが SQL のようなオプティマイザーを持っていないことは理解していますが、パーティションを管理する必要がある場合、それを利用するべきではありませんか?)

どうもありがとう

4

1 に答える 1

1

説明した両方のクエリについて、BigQuery は引き続きすべてのデータを処理します。結合されたクエリの場合、データのレイアウトは多少有利かもしれませんが、BigQuery の作業が少なくなるわけではありません。したがって、同じ料金が請求されるという事実です。あなたが提案したように、必要なパーティションのみを使用するクエリを作成できれば、処理するデータが少なくなるため、コストが低くなります。

すべてのデータを 1 つのテーブルに格納するか、複数のテーブルに分散してユニオン クエリを実行することでパフォーマンスが向上するかを予測することは困難です。この特定のクエリでは、union の方が速いように思えますが、パーティション全体に分散しているより多くの作業を実行している可能性のあるクエリなど、他のクエリでは遅くなる可能性があります。

経験則では、どのパーティションが必要になるかを把握してデータを事前にフィルタリングできれば、より安価なクエリを実行できるという理由だけで、より良い結果が得られるということです。小さいデータに対してクエリが遅くなることはほとんどなく、多くの場合、クエリは高速になる可能性があります。

また、クエリで複数のテーブルを選択するための構文の改善 (クエリで日付範囲やワイルドカードを指定できるようにするなど) は、最も頻繁に要求される機能の 1 つです。すぐに。テーブルはどのように分割されていますか? クエリに適したテーブルを簡単に指定するにはどうすればよいでしょうか?

于 2012-10-29T15:36:48.153 に答える