S3 での Delta Lake の制限
この記事では、Databricks 上の Delta Lake を使用して S3 に格納されたデータを操作する際に発生する可能性のあるいくつかの制限について詳しく説明します。 Amazon S3で使用される結果整合性モデルは、複数のシステムまたはクラスターが同じテーブル内のデータを同時に変更するときに、潜在的な問題を引き起こす可能性があります。
Databricks と Delta Lake は デフォルト によるマルチクラスター書き込みをサポートしているため、複数のクラスターからテーブルに同時に書き込むクエリによってテーブルが破損することはありません。 S3 に格納されている Delta テーブルの場合、この保証は 1 つの Databricks ワークスペースに制限されます。
データ破損やデータ損失の問題を回避するために、Databricks では、S3 に格納されている同じ Delta テーブルを異なるワークスペースから変更しないことをお勧めします。
バケットのバージョニングと Delta Lake
Databricks は、マネージドテーブルなど、 Delta Lake データを保存するバケットに対してバケットのバージョニングを有効にしない Unity Catalog 推奨しています。 Delta Lake は、独自のバージョン管理とガベージ コレクションを実装しています。
バケットのバージョニングを有効にすると、S3 は、Databricks の手動プロセスと自動プロセスで削除されたと見なされるメタデータとデータファイルのコピーを保持します。これには、 VACUUM
が完全に削除するデータ ファイルや、通常の Delta テーブル操作中に自動的にクリーンアップされるトランザクション ログが含まれます。
バケットのバージョニングを使用する場合、Databricks では、3 つのバージョンを保持し、バージョニングが有効になっているすべての S3 バケットのバージョンを 7 日以内保持するライフサイクル管理ポリシーを実装することをお勧めします。
バージョニングが有効になっているバケットに格納されたテーブルでパフォーマンスの低下が発生した場合は、Databricks サポートに連絡する際に、バケットのバージョニングが有効になっていることを示してください。
S3でのマルチクラスター書き込みの制限は何ですか?
このモードで実行している場合、次の機能はサポートされません。
- 顧客提供の暗号化キーによるサーバー側の暗号化
- AWSSecurityS3 トークン サービス にアクセスできないクラスター内の資格情報を持つパス
マルチクラスターの書き込みを無効にするには、 spark.databricks.delta.multiClusterWrites.enabled
を false
に設定します。 無効になっている場合、1 つのテーブルへの書き込みは1 つのクラスターから行う 必要があります 。
spark.databricks.delta.multiClusterWrites.enabled
Delta を無効にし、 複数の クラスターから同じ テーブルを同時に変更すると、データの損失や破損につながる可能性があります。
Delta Lake のファイルを rm -rf
で削除し、同じ場所に新しいテーブルを作成した後、テーブルに古いデータが表示されるのはなぜですか?
rm -rf
を使用して Delta テーブルを削除しないでください。「Delta テーブルの削除または置換」を参照してください。