特定のメンテナンス目標のために Delta テーブルの一部を書き換える必要がある場合は、 REORG コマンドを使用します。 Fabricでは、REORG は、選択したオプションに応じて、データ ファイルを書き換えたり、テーブルメタデータを更新したりして、テーブルの物理レイアウトを再構成します。
REORG は、定期的なファイル圧縮とは異なります。 削除ベクトルによって削除済みとマークされた行を物理的に削除するようなシナリオを対象としています。
REORG の機能
REORG TABLE は、定義されたメンテナンス操作のテーブルの状態を書き換えます。
-
APPLY (PURGE)は、影響を受けるデータ ファイルを書き換え、削除ベクトルによって論理的に削除された行が、基になる Parquet ファイルから物理的に削除されるようにします。
特定の書き換えの結果が必要な場合は、 REORG を使用します。ファイルのサイズを小さくしたり減らしたりする必要はありません。
PURGE を使用して論理的に削除された行を物理的に削除する
削除ベクターを使用すると、元の Parquet ファイルをすぐに書き換えることなく、Delta Lake で行を削除済みとしてマークできます。 この動作により、削除操作は効率的に維持されますが、削除された行データは、書き換えるまで物理ファイルに引き続き存在します。
REORG TABLE ... APPLY (PURGE) を実行すると、Fabric によって影響を受けるファイルが書き換えられ、アクティブな Parquet ファイルから論理削除された行が削除されます。
PURGEが完了すると、削除された行は実際には書き換えられたファイルから削除されます。
Note
PURGE は通常、個別のメンテナンス 手順として必要ありません。
OPTIMIZE は、圧縮時に削除ベクトルによって 5% を超えるレコードが参照されるファイルを自動的に消去します。
PURGE は、論理削除された行が物理的に削除されるタイミングを明示的に制御する必要がある場合にのみ使用してください。
このオプションは、次の場合に便利です。
- コンプライアンスまたは GDPR の要件があり、削除されたデータを特定のスケジュールで物理的に削除する必要があります。
-
OPTIMIZEが使用する 5% しきい値を下回るファイルを強制的に消去する必要があります。
構文を確認する
Fabric ノートブックで次の例を使用します。
テーブルからソフト削除された行を完全に削除する
論理的に削除された行を消去して一致するデータのみ
特定のパーティションまたはデータの小さなスライスを対象とする場合は、 WHERE 句を使用します。
REORG または OPTIMIZE を選択する
REORG と OPTIMIZE は異なる問題を解決します。
-
OPTIMIZEはビン圧縮を実行します。 小さなファイルを大きなファイルに統合してスキャン効率を向上させます。 -
REORG ... APPLY (PURGE)は、削除ベクトルによって削除済みとしてマークされた行を物理的に除去します。
両方のコマンドを一緒に使用できます。 たとえば、 REORG ... APPLY (PURGE) を実行して削除されたデータを物理的に削除し、 OPTIMIZE を実行してファイル レイアウトを改善できます。
削除ベクトルを理解する
削除ベクトルは、行を含む Parquet ファイルを直ちに書き換えることなく、行を削除済みとしてマークするメタデータ構造です。 リーダーは削除ベクトルを優先するため、削除された行はクエリ結果には表示されませんが、書き換えが行われるまでバイトはストレージに残ります。
REORG ... APPLY (PURGE) は、書き換えられた Parquet ファイルからこれらの行を物理的に削除する手順です。
Fabric で REORG を実行する
Fabricで Spark ベースのエクスペリエンスから REORG を実行します。次に例を示します。
- Fabric ノートブック
- Spark ジョブ定義
SQL 分析エンドポイントから REORG を実行しないでください。
REORG は、Delta テーブルの Spark SQL メンテナンス コマンドです。
ベスト プラクティスに従う
- コンプライアンス要件など、特定のニーズがある場合にのみ、
PURGEを実行します。OPTIMIZEでは、5% を超えるレコードが削除ベクトルによって参照されるファイルが自動的に消去されるため、通常、定期的なメンテナンスでは別のPURGE手順は必要ありません。 - コンプライアンスまたは GDPR 要件のために削除されたデータを物理的に削除する必要がある場合は、
PURGEする前にVACUUMを実行します。 - 完全なテーブルを書き換える必要がない場合は、
WHERE述語を使用して特定のパーティションを対象とします。 - Iceberg リーダーが必要な場合は
UPGRADE UNIFORMを使用しますが、UniForm が保持する追加のメタデータを計画してください。 -
REORGとOPTIMIZEは、交換可能なメンテナンス操作ではなく、補完的なメンテナンス操作として扱います。