Comprehensive Guide to Optimize Data Workloads | DatabricksのセクションData Purging — What to Do With Stale Dataの翻訳です。
- 本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
- 2023年時点の内容です。一部情報が古いものがあります。
Deltaでは、使用されていない古いデータファイルをパージするためのVACUUMの機能が提供されています。この機能は、Deltaによって管理されていないテーブルのディレクトリから全てのファイルを削除し、テーブルのトランザクションログの最新状態に含まれておらず、保持期間の閾値よりも古いデータファイルも削除します。デフォルトの閾値は7日です。
VACUUM table_name
以下のように、必要であればデフォルトの保持期間の閾値を変更することができます:
-- table properties
deltaTable.deletedFileRetentionDuration = “interval 15 days”
VACUUMは、_delta_logを含むアンダースコア(_)で始まる全てのディレクトリをスキップします。チェックポイントのオペレーションの後に、ログファイルは自動かつ非同期的に削除されます。ログファイルのデフォルトの保持期間は30日であり、delta.logRetentionDuration
を通じて設定することができます。
- テーブルに対して同時実行するリーダーやライターによって、古いスナップショットやコミットされていないファイルが以前として使用されることがあるため、少なくとも保持期間を7日にすることをお勧めします。VACUUMがアクティブなファイルを削除すると、同時実行しているリーダーが失敗することがあり、さらに悪いケースでは、コミットされていないファイルをVACUUMが削除した際にテーブルが破損します。
- データとトランザクション履歴が同じ期間保持されるように、
deltaTable.deletedFileRetentionDuration
とdelta.logRetentionDuration
には同じ値を設定しましょう。 - Deltaテーブルに適用されるトランザクションの頻度に応じて、日次/週次でVACUUMコマンドを実行しましょう。
- このコマンドをジョブの一部として実行せず、OPTIMIZEコマンドと一緒に別個かつ個別のクラスターで実行しましょう。
- VACUUMはそれほど計算リソースを必要としない(メインのタスクは、ワーカーで並列実行できるファイルの一覧です。実際のファイルの削除はドライバーによって行われます)ので、1から4台のワーカーを持つ小規模なオートスケーリングクラスターで十分です。