Note
手動チューニングの推奨事項は、ファイル サイズの自動チューニングを使用する Unity カタログのマネージド テーブルには適用されません。 新しいテーブルの場合は、既定の設定で Unity カタログのマネージド テーブルを使用します。
Databricks Runtime 13.3 LTS 以降では、テーブル レイアウトにクラスタリングを使用することをお勧めします。 表に液体クラスタリングを使用するを参照してください。
Databricks では、予測最適化を使用して、テーブルの OPTIMIZE と VACUUM を自動的に実行することをお勧めします。 「Unity Catalog 管理テーブルの予測最適化」を参照してください。
自動圧縮と最適化された書き込みは、 MERGE、 UPDATE、および DELETE 操作に対して常に有効になります。 この機能をオフにすることはできません。
Azure Databricks Unity カタログのマネージド テーブルのファイル サイズが自動的に調整されます。 外部テーブルとレガシ ワークロードの場合は、自動圧縮、最適化された書き込み、ターゲット ファイル サイズを構成して、データの書き込みと圧縮方法を制御できます。
Unity カタログのマネージド テーブルの場合、SQL ウェアハウスまたは Databricks Runtime 11.3 LTS 以降を使用している場合、Databricks はほとんどの構成を自動的に調整します。
Databricks Runtime 10.4 LTS 以降からワークロードをアップグレードする場合は、「 バックグラウンド自動圧縮へのアップグレード」を参照してください。
OPTIMIZE を実行するタイミング
自動圧縮と最適化された書き込みはそれぞれ小さなファイルの問題を減らしますが、OPTIMIZE の完全な置き換えではありません。 1 TB を超えるテーブルの場合、Databricks では、ファイルをさらに統合するために、スケジュールに従って OPTIMIZE を実行することをお勧めします。 Databricks では、強化されたデータスキップのために液体クラスタリングを推奨しています。 液体クラスタリングが有効になっている場合、 OPTIMIZE はクラスタリング キーによってデータを自動的に再構成します。
表に液体クラスタリングを使用するを参照してください。
Unity カタログのマネージド テーブルでは、 予測最適化 が有効になっているテーブルに対して OPTIMIZE 予測最適化が自動的に実行されます。
自動最適化
自動最適化 では、設定の autoOptimize.autoCompact と autoOptimize.optimizeWriteについて説明します。
自動圧縮と最適化された書き込みを参照してください。
自動圧縮
自動圧縮では、テーブル パーティション内の小さなファイルを組み合わせて、小さなファイルの問題を軽減します。 書き込みが成功した後、書き込みを実行するクラスターで同期的に実行され、以前に圧縮されていないファイルのみが圧縮されます。
自動圧縮と予測の最適化は、個別に、または一緒に使用できる独立した機能です。 自動圧縮は書き込みを実行するクラスターで実行され、予測最適化ではサーバーレス コンピューティングを使用してメンテナンス操作が非同期的に実行されます。
自動圧縮を構成するには、次の設定を使用します。
| Setting | Delta | Iceberg | Description |
|---|---|---|---|
| 自動圧縮を有効にする (テーブル プロパティ) | autoOptimize.autoCompact |
autoOptimize.autoCompact |
テーブル レベルで自動圧縮を有効にします。 |
| 自動圧縮を有効にする (Spark セッション) | spark.databricks.delta.autoCompact.enabled |
spark.databricks.iceberg.autoCompact.enabled |
セッション レベルで自動圧縮を有効にします。 |
| 最大出力ファイル サイズ | spark.databricks.delta.autoCompact.maxFileSize |
spark.databricks.iceberg.autoCompact.maxFileSize |
ターゲット出力ファイルのサイズを制御します。 |
| 圧縮をトリガーする最小ファイル数 | spark.databricks.delta.autoCompact.minNumFiles |
spark.databricks.iceberg.autoCompact.minNumFiles |
自動圧縮をトリガーするためにパーティションまたはテーブルに必要な小さなファイルの最小数を設定します。 |
これらの設定は、次のオプションを受け付けます。
| オプション | Behavior |
|---|---|
auto (推奨) |
他の自動チューニング機能を考慮しながら、ターゲット ファイル サイズを調整します。 |
legacy |
true の別名。 |
true |
ターゲット ファイル サイズとして 128 MB を使用します。 動的なサイズ設定なし。 |
false |
自動圧縮をオフにします。 ワークロードで変更されたすべてのテーブルの自動圧縮をオーバーライドするには、セッション レベルで設定できます。 |
Note
Azure Databricks では、自動チューニングを使用して、テーブル サイズに基づいて出力ファイルのサイズを制御することをお勧めします。 テーブル サイズに基づくファイル サイズの自動チューニングに関するページを参照してください。
最適化された書き込み
最適化された書き込みでは、データが書き込まれるときにファイル サイズを改善し、テーブルの後続の読み取りを向上させます。
最適化された書き込みは、各パーティションに書き込まれる小さなファイルの数を減らすため、パーティション テーブルに最も効果的です。 少数の大きなファイルへの書き込みは、多数の小さなファイルへの書き込みよりも効率的ですが、それでも書き込み待機時間が長くなる可能性があります。書き込み前にデータがシャッフルされるためです。
最適化された書き込みのしくみを次の図に示します。
Note
最適化された書き込みを使用する場合、Databricks では、書き込みの直前に coalesce(n) または repartition(n) を実行して、書き込まれたファイルの数を制御しないことをお勧めします。
次の操作では、最適化された書き込みが既定で有効になります。
MERGE- サブクエリをともなう
UPDATE - サブクエリをともなう
DELETE
SQL ウェアハウスを使用するときは、CTAS ステートメントと INSERT 操作についても最適化された書き込みが有効になります。 Databricks Runtime 13.3 LTS 以降では、Unity カタログに登録されているすべてのテーブルで、 CTAS ステートメントとパーティション テーブルの INSERT 操作に対する書き込みが最適化されています。
最適化された書き込みは、次の設定を使用して、テーブルまたはセッション レベルで有効できます。
- テーブル プロパティ:
autoOptimize.optimizeWrite - SparkSession の設定:
spark.databricks.delta.optimizeWrite.enabled(デルタ) またはspark.databricks.iceberg.optimizeWrite.enabled(Iceberg)
これらの設定は、次のオプションを受け付けます。
| オプション | Behavior |
|---|---|
true |
ターゲット ファイル サイズとして 128 MB を使用します。 |
false |
最適化された書き込みをオフにします。 セッション レベルで設定して、ワークロードで変更されたすべてのテーブルの最適化された書き込みをオーバーライドできます。 |
ターゲット ファイル サイズを設定する
テーブル内のファイルのサイズを調整するには、table プロパティをtargetFileSize目的のサイズに設定します。 設定すると、すべてのデータ レイアウト最適化操作で、最適化、液体クラスタリング、自動圧縮、最適化された書き込みなど、指定したサイズのファイルを生成するためのベスト エフォートの試行が行われます。
Note
Unity Catalog マネージド テーブルと SQL ウェアハウスまたは Databricks Runtime 11.3 LTS 以上を使用するときは、OPTIMIZE コマンドのみが targetFileSize 設定を考慮します。
| プロパティ | Description |
|---|---|
delta.targetFileSize (デルタ)iceberg.targetFileSize (アイスバーグ) |
型: サイズ (バイト単位以上)。 説明: ターゲット ファイルのサイズ。 たとえば、 104857600 (バイト) または 100mb。既定値: なし |
既存のテーブルでは、SQL コマンド ALTER TABLESET TBL PROPERTIES を使用して、プロパティを設定および設定解除できます。 また、これらのプロパティは、Spark セッション構成を使用して、新しいテーブルの作成時にも自動的に設定できます。 詳細については、 テーブルプロパティリファレンス を参照してください。
テーブル サイズに基づいてファイル サイズを自動チューニングする
手動チューニングを最小限に抑えるには、Azure Databricksテーブルのサイズに基づいてテーブルのファイル サイズを自動的に調整します。 Azure Databricksでは、テーブルのサイズが小さい場合はファイル サイズが小さくなり、大きなテーブルでは大きなファイル サイズが使用されるため、テーブル内のファイルの数が大きくなりすぎないようにします。 Azure Databricksでは、特定のターゲット サイズでチューニングしたテーブルは自動チューニングされません。
ターゲット ファイルのサイズは、テーブルの現在のサイズに基づきます。 2.56 TB 未満のテーブルの場合、自動調整後のターゲット ファイル サイズは 256 MB です。 サイズが 2.56 TB から 10 TB のテーブルの場合、ターゲット サイズは 256 MB から 1 GB に直線的に大きくなります。 10 TB を超えるテーブルの場合、ターゲット ファイル サイズは 1 GB です。
Note
テーブルのターゲット ファイル サイズが拡大した場合、既存のファイルは OPTIMIZE コマンドによって大きなファイルに再最適化されません。 したがって、1 つの大きなテーブルに常に、ターゲット サイズより小さなファイルが複数含まれる可能性があります。 これらの小さなファイルも大きなファイルに最適化する必要がある場合は、targetFileSize テーブル プロパティを使用してテーブルに対して固定したターゲット ファイル サイズを構成できます。
テーブルが増分書き込みされる場合、ターゲット ファイル サイズとファイル数は、テーブルのサイズに基づいて、ほぼ次のようになります。 このテーブル内のファイル数は 1 つの例です。 実際の結果は、多くの要因によって異なります。
| テーブルのサイズ | ターゲット ファイル サイズ | テーブル内のファイルのおおよその数 |
|---|---|---|
| 10 GB | 256 MB | 40 |
| 1 TB (テラバイト) | 256 MB | 4096 |
| 2.56 TB | 256 MB | 10240 |
| 3 テラバイト | 307 MB | 12108 |
| 5 テラバイト (TB) | 512 MB | 17339 |
| 7 テラバイト (TB) | 716 MB | 20784 |
| 10テラバイト | 1 GB | 24437 |
| 20 TB | 1 GB | 34437 |
| 50 TB | 1 GB | 64437 |
| 100 TB | 1 GB | 114437 |
データ ファイルに書き込まれる行を制限する
場合によっては、ナロー (ロング) データのテーブルでは、特定のデータ ファイル内の行数が Parquet 形式のサポート制限を超えるというエラーが発生する可能性があります。 このエラーを回避するには、SQL セッション構成 spark.sql.files.maxRecordsPerFile を使用して、テーブルの 1 つのファイルに書き込むレコードの最大数を指定します。 0 または負の値の値を指定すると、制限がないことを示します。
DataFrame API を使用してテーブルに書き込むときに maxRecordsPerFile DataFrameWriter オプションを使用することもできます。
maxRecordsPerFile が指定されると、SQL セッション構成 spark.sql.files.maxRecordsPerFile の値は無視されます。
Note
Databricks では、エラーを回避する必要がない限り、 maxRecordsPerFile の使用は推奨されません。 この設定は、データが非常に狭い一部の Unity カタログ マネージド テーブルに必要な場合があります。
バックグラウンド自動圧縮にアップグレードする
Unity カタログのマネージド テーブルでは、バックグラウンド自動圧縮を使用できます。 バックグラウンド自動圧縮では、予測最適化は必要ありません。 レガシ ワークロードまたはテーブルを移行する場合は、次の手順を実行します。
- クラスターまたはノートブックの構成設定から Spark 構成
spark.databricks.delta.autoCompact.enabled(Delta) またはspark.databricks.iceberg.autoCompact.enabled(Iceberg) を削除します。 - 各テーブルについて、
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)(Delta) またはALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact)(Iceberg) を実行して、従来の自動圧縮設定を削除します。
これらの従来の構成を削除すると、すべての Unity カタログ マネージド テーブルに対してバックグラウンド自動圧縮が自動的にトリガーされます。