オンラインの書籍では、PolyBaseでのクエリの最適化について次のように述べています。
クエリオプティマイザーはコストベースの決定を行い、クエリのパフォーマンスを向上させるときに計算をHadoopにプッシュします。 コストベースの決定を行うために外部テーブルの統計を使用します。計算をプッシュすると、MapReduceジョブが作成され、Hadoopの分散計算リソースが活用されます。
私の質問-オプティマイザはこれらの統計をいつどのように収集しますか?
SQL Server内では、リレーショナルエンジンの統計情報を暗黙的または明示的に作成でき、書き込みが発生するにつれて古くなり、明示的またはテーブルのメンテナンス中に更新できます。 PolyBaseで採用されている同様の戦略はありますか?
SQL Serverが途中で見ることなくデータがHadoop/Azure BLOBに読み込まれる可能性があり、データ量が多くなる(おそらく)サンプリングまたは同様の方法で実行時のアドホック統計を作成することは、私にとってはありそうもない戦略のようです。
PolyBase統計の作成と保守は、DBAが行います。
「はじめに」ガイドでは、PolyBaseを確立するための いくつかの手順 を提供しています。その最後は、外部テーブルを参照するCREATE STATISTICSです。
CREATE STATISTICSの documentation は次のように述べています。
外部テーブルの統計
外部テーブル統計を作成するとき、SQL Serverは外部テーブルを一時SQL Serverテーブルにインポートしてから、統計を作成します。サンプル統計の場合、サンプリングされた行のみがインポートされます。大きな外部テーブルがある場合、フルスキャンオプションの代わりにデフォルトのサンプリングを使用する方がはるかに高速になります。
さらに下へ
制限と制限
統計の更新は、外部テーブルではサポートされていません。外部テーブルの統計を更新するには、統計を削除して再作成します。
このことから、システム管理者の責任であると結論付けます。
製品が成熟し、勢いを増すにつれて、現在のデータエンジンからのより多くの機能(自動作成および自動更新統計)がPolyBaseに移植されると想像できます。反対に、5PBストアがサンプリングされている間、本当に結果を待ちますか?