Remove unused data files with vacuum | Databricks on AWS [2022/11/3時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
テーブルに対してvacuum
コマンドを実行することで、保持期間よりも古くて、Deltaテーブルによって参照されていないファイルを削除することができます。vacuum
は自動では起動されません。ファイルに対するデフォルトの保持期間は7日間です。この挙動を変更するには、Configure data retention for time travelを参照ください。
重要!
-
vacuum
はDelta Lakeによって管理されていないディレクトリのすべてのファイルを削除し、_
で始まるディレクトリは無視します。Deltaテーブルのディレクトリ内の構造化ストリーミングのチェックポイントのような追加のメタデータを格納している場合には、_checkpoints
のようなディレクトリ名を使ってください。 -
vacuum
はログファイルではなくデータファイルのみを削除します。ログファイルは、チェックポイントオペレーションの後に自動かつ非同期的に削除されます。ログファイルのデフォルトの保持期間は30日であり、SQLメソッドALTER TABLE SET TBLPROPERTIES
でdelta.logRetentionDuration
プロパティを通じて設定することができます。Delta table properties referenceをご覧ください。 -
vacuum
を実行した後は、保持期間よりも古いバージョンにタイムトラベルできなくなります。
注意
ディスクキャッシュが有効化されている場合、クラスターにvacuum
で削除されたParquetファイルのデータが含まれる場合があります。このため、ファイルが削除された以前のテーブルバージョンのデータにクエリーできる場合があります。クラスターを再起動することで、クラスターからキャッシュデータが削除されます。Configure the disk cacheをご覧ください。
VACUUMのサンプル
VACUUM eventsTable -- vacuum files not required by versions older than the default retention period
VACUUM '/data/events' -- vacuum files in path-based table
VACUUM delta.`/data/events/`
VACUUM delta.`/data/events/` RETAIN 100 HOURS -- vacuum files not required by versions more than 100 hours old
VACUUM eventsTable DRY RUN -- do dry run to get the list of files to be deleted
Spark SQL構文の詳細については、VACUUMをご覧ください。
Scala、Java、Python構文の詳細については、Delta Lake API documentationをご覧ください。
どの程度の頻度でVACUUMを実行すべきですか?
過度なクラウドデータストレージのコストを削減するために、すべてのテーブルに対してVACUUM
を定期的に実行することをお勧めします。vacuumのデフォルト保持期間は7日間です。閾値を高く設定すると、より長いテーブル履歴にアクセスすることができますが、格納されるデータファイルの数が増加し、クラウドプロバイダーのストレージコストを増加させることになります。
低い保持期間の閾値でDeltaテーブルをVACUUMできないのはなぜですか?
警告!
テーブルに対するリーダー、ライターの同時実行によって、古いスナップショットやコミットされていないファイルが使用されている場合があるので、保持期間の最小値は7日間にすることをお勧めします。VACUUM
がアクティブなファイルをクリーンアップすると、同時実行されているリーダーが失敗することがあり、さらに悪いケースでは、VACUUM
がコミットされていないファイルを削除するとテーブルが破損する場合があります。最長の同時実行トランザクション期間や、テーブルに対する最新の更新に対してすべてのストリームが遅延する最長期間よりも長い期間を選択すべきです。
Delta Lakeには、危険なVACUUM
コマンドの実行を防ぐ安全チェック機能があります。指定しようとしている保持期間よりも長い時間実行されるオペレーションが存在しないことが確実である場合には、Spark設定spark.databricks.delta.retentionDurationCheck.enabled
をfalse
に設定することで、安全チェック機能をオフにすることができます。
監査情報
VACUUM
のDeltaのトランザクションログへのコミットに監査ログを含めることができます。DESCRIBE HISTORY
を用いて、監査イベントにクエリーを行うことができます。
監査情報をキャプチャするには、spark.databricks.delta.vacuum.logging.enabled
を有効化します。複数ワークスペースの書き込みにおいてS3で提供される一貫性保証が限定的なため、AWS S3ノエテーブルにおける監査ログはデフォルトでは有効化されません。S3で有効化する際には、複数ワークスペースの書き込みがワークフローに含まれていないことを確認してください。処理に失敗するとデータ損失につながる場合があります。