動的ファイルプルーニング
動的ファイルプルーニングにより、Delta Lake テーブルに対する多くのクエリのパフォーマンスを大幅に向上させることができます。 動的ファイル・プルーニング・トリガは、フィルタ文または WHERE
句を含むクエリに対してトリガします。 MERGE
、 UPDATE
、および DELETE
ステートメントで動的ファイルプルーニングを使用するには、Photon 対応コンピュートを使用する必要があります。Photonが使用されていないときに動的ファイルプルーニングを活用するのは、 SELECT
ステートメントのみです。
動的ファイルプルーニングは、パーティション化されていないテーブルや、パーティション化されていないカラムのジョインに特に効率的です。 動的ファイルプルーニングのパフォーマンスへの影響は、多くの場合、データのクラスタリングと相関しているため、 Z-Ordering を使用してメリットを最大化することを検討してください。
動的ファイルプルーニングの背景とユースケースについては、「 動的ファイルプルーニングを使用した Delta Lake での高速 SQL クエリ」を参照してください。
構成
動的ファイルプルーニングは、次の Apache Spark 設定オプションによって制御されます。
spark.databricks.optimizer.dynamicFilePruning
(デフォルトはtrue
): オプティマイザにフィルタを押し下げるように指示するメインフラグ。false
に設定すると、動的ファイルプルーニングは有効になりません。spark.databricks.optimizer.deltaTableSizeThreshold
(デフォルトは10,000,000,000 bytes (10 GB)
): 動的ファイルプルーニングをトリガーするために必要な結合のプローブ側の Delta テーブルの最小サイズ (バイト単位) を表します。 プローブ側がそれほど大きくない場合は、フィルターを押し下げる価値はおそらくなく、テーブル全体をスキャンするだけでよいでしょう。 Delta テーブルのサイズは、DESCRIBE DETAIL table_name
コマンドを実行し、sizeInBytes
列を調べることで確認できます。spark.databricks.optimizer.deltaTableFilesThreshold
(デフォルトは10
): 動的ファイルプルーニングをトリガーするために必要な結合のプローブ側にある Delta テーブルのファイル数を表します。 プローブ・サイド・テーブルに含まれるファイルがしきい値より少ない場合、動的ファイル・プルーニングはトリガーされません。 テーブルに少数のファイルしかない場合は、動的ファイルプルーニングを有効にする価値はおそらくありません。 Delta テーブルのサイズは、DESCRIBE DETAIL table_name
コマンドを実行し、numFiles
列を調べることで確認できます。