S3 での Delta Lake の制限
Databricks上のDelta Lakeは、Amazon S3でテーブルを保存する際に、バケットのバージョン管理制約、マルチクラスタの書き込み制限、ファイルを直接削除することのリスクなど、特定の制限があります。
バケットのバージョニングと Delta Lake
Databricksは、Delta Lakeデータを保存するバケット(Unity Catalog マネージドテーブルを含む)についてはバケットのバージョン管理を無効にすることを推奨しています。Delta Lakeは独自のバージョン管理とガベージコレクションを実装しています。
バケットバージョン管理を有効にすると、S3はDatabricksの手動・自動処理が削除されたとみなすメタデータやデータファイルのコピーを保持します。これには、VACUUMが永続的に削除するデータファイル、および通常のDelta Lakeテーブル操作中に自動的にクリーンアップされるトランザクションログが含まれます。
バケットのバージョニングを使用する場合、Databricks では、3 つのバージョンを保持し、バージョニングが有効になっているすべての S3 バケットのバージョンを 7 日以内保持するライフサイクル管理ポリシーを実装することをお勧めします。
バケットに保存されたテーブルでバージョン管理が有効になった場合、Databricksサポートに連絡する際にバケットバージョン管理が有効であることを伝えてください。
マルチクラスタ書き込みの制限
データの破損やデータ損失を避けるために、Databricksは異なるワークスペースからS3に保存されている同じDelta Lakeテーブルを改変しないことを推奨しています。
Amazon S3で最終的に 一貫 したモデルが使われているため、複数のシステムやクラスターが同じテーブル内のデータを同時に変更すると問題が生じる可能性があります。
Databricks と Delta Lake はデフォルトでマルチクラスター書き込みをサポートしているため、複数のクラスターから同時にテーブルに書き込むクエリによってテーブルが破損することはありません。S3 に格納されている Delta Lake テーブルの場合、この保証は 1 つの Databricks ワークスペースに制限されます。
このモードで実行している場合、次の機能はサポートされません。
- 顧客提供の暗号化キーによるサーバー側の暗号化
- AWSSecurityS3 トークン サービス にアクセスできないクラスター内の資格情報を持つパス
マルチクラスターの書き込みをオフにするには、spark.databricks.delta.multiClusterWrites.enabled を falseに設定します。無効になっている場合、1 つのテーブルへの書き込みは、1 つのクラスターから行う必要があります。
spark.databricks.delta.multiClusterWrites.enabledをオフにして 複数のクラスタの 同じDelta Lakeテーブルを同時に変更すると、データ損失や破損の原因になる可能性があります。
Databricksにおけるマルチクラスタ書き込みの詳細については、「 Databricks S3 コミットサービス関連設定」をご覧ください。
ファイルを削除した後の古いデータ rm -rf
Delta Lake テーブルを削除するには、rm -rfを使用しないでください。テーブルの削除または置換を参照してください。