Deltaテーブルのメンテナンスは、テーブルの規模が拡大しても、高速でストレージ効率の高い状態を維持するのに役立ちます。 時間の経過と同時に、デルタ テーブルは多数の小さなファイルを蓄積し、削除されたデータはストレージ領域を消費し続け、古い統計はクエリの効率を低下させることができます。 定期的なメンテナンスは、読み取りパフォーマンスの向上、ストレージの再利用、およびワークロードによるデータへのアクセス方法に合わせてテーブル メタデータを維持するのに役立ちます。 この記事は、Delta テーブルで使用できる主要なメンテナンス操作のクイック ガイドとして使用します。
メンテナンスが重要な理由
Delta テーブルが大きくなると、書き込みアクティビティによってテーブルの物理レイアウトが変更されます。 インジェスト ジョブを繰り返し実行すると、多数の小さなファイルを作成したり、更新操作や削除操作を行ったり、参照されていないファイルや論理的に削除された行を残したりすることができます。古い統計を使用すると、Spark が不要なデータをスキップすることが困難になる可能性があります。 テーブルを定期的にメンテナンスすることで、スキャン時のオーバーヘッドを削減し、Fabric がクエリをより効果的に最適化できるようになり、現在アクティブなテーブル バージョンでは不要になったストレージの保持コストを回避できます。
ビン圧縮に OPTIMIZE を使用する
Delta テーブルに多数の小さなファイルが蓄積されており、より小さいファイルに統合する場合は、 OPTIMIZE を使用します。 この操作により、ファイル管理のオーバーヘッドを減らし、スキャンの効率を高めることで、読み取りパフォーマンスが向上します。
OPTIMIZE では、 VORDERなどの他の引数や機能もサポートされています。 完全な構文、オプション、および例については、「 テーブルの圧縮 と V オーダー」を参照してください。
ストレージクリーンアップに VACUUM を使用する
構成された保持期間より古い参照されていないデータ ファイルを削除する場合は、 VACUUM を使用します。 Fabricでは、この操作は、更新、削除、マージ、上書き操作、圧縮後に OneLake ストレージを再利用するのに役立ちます。
VACUUM は、クエリのチューニングではなくストレージのクリーンアップに重点を置いているため、通常は、他のメンテナンス タスクを置き換える代わりに補完します。 保持ガイダンスと実行の詳細については、 VACUUM を参照してください。
ターゲット再編成に REORG を使用する
REORGは、一般的なファイル圧縮ではなく、特定のメンテナンス目標に対してテーブルの状態を書き換える必要がある場合に使用します。 Delta Lake では、REORG TABLE ... APPLY (PURGE) は削除ベクターで削除済みとしてマークされた行を物理的に削除します。 サポートされているオプションと使用するタイミングについては、REORG を使用した 差分テーブルの再構成を参照してください。
Note
REORG は通常、5% を超えるレコードが削除ベクトルによって参照されるファイルを自動的に消去するため、 OPTIMIZE は必要ありません。
統計を最新の状態に保つ
Fabric Spark ランタイムでは、Delta テーブルの 2 種類の統計 (ファイル統計とテーブル統計) がサポートされています。
- ファイル統計 - Delta Lake は、データ ファイルが書き込まれるたびに、インデックス付き列のファイルごとの最小、最大、および null カウントの値を記録します。 Spark エンジンでは、これらの統計を使用して、クエリ述語に一致する行を含めることができないファイルをスキップし、スキャンされるデータの量を減らします。 既定では、最初の 32 列の統計が収集されます。 ファイルのスキップのしくみと、収集する列の統計をカスタマイズする方法の詳細については、「 ファイルのスキップ」を参照してください。
- テーブル統計 - テーブル内のすべてのファイルにわたって集計された列レベルの統計は自動的に管理されるため、Spark はクエリ計画に適したメタデータを持ちます。 これらの統計は、フィルター、結合、および集計の最適化に関する決定を改善して、パフォーマンスを向上させます。 自動統計のしくみと構成方法については、「 Delta テーブルの自動統計」を参照してください。
継続的なファイル管理にオートコンプリートを使用する
Delta Lake では書き込み後の自動圧縮もサポートされているため、毎回別の手動ジョブを必要とせずに、テーブルの正常性を維持できます。 この動作は、Spark ワークロードの管理方法に応じて、テーブルのプロパティまたはワークスペースの設定を使用して制御できます。 有効にする方法の詳細については、「 自動圧縮 」を参照してください。
Lakehouse UI からメンテナンスを実行する
UI ベースのワークフローを使用する場合は、Lakehouse エクスプローラーから直接メンテナンス アクションを実行できます。 「Lakehouse テーブルのメンテナンス」を参照してください。
実用的なメンテナンス周期に従う
大規模なバッチ インジェスト後、または小さなファイルの蓄積と読み取りの速度低下が始まるたびに、 OPTIMIZE を実行します。 毎週、または大規模な圧縮サイクルの後などの定期的な周期で VACUUM を実行して、テーブルが参照しなくなったファイルからストレージを再利用します。
REORG TABLE ... APPLY (PURGE) は、5% を超えるレコードが削除ベクトルによって参照されるファイルを自動的に消去 OPTIMIZE ので、定期的なメンテナンスとして必要ありません。 コンプライアンスや GDPR の義務など、明示的な制御を必要とするシナリオに PURGE を予約します。
DESCRIBE DETAILとDESCRIBE HISTORYを使用してテーブルの状態を監視し、各操作の前後にファイルの数、サイズ、およびメンテナンス履歴を追跡できるようにします。
-- View current table state
DESCRIBE DETAIL table_name;
-- View history of transactions
DESCRIBE HISTORY table_name;