分離レベルと書き込み競合の動作により、Azure Databricks上で同じDelta Lakeテーブルを同時に読み書きした場合に何が起こるかが決まります。
複数のジョブやユーザーが同時に同じテーブルに書き込みを行う場合、その書き込みの一部は競合例外で失敗することがあります。 必要に応じて、このセクションのページをご利用ください:
-
ConcurrentAppendExceptionのような並行書き込みによる失敗を解決または削減します。 競合の例外を参照してください。 - テーブルがデフォルトよりも強い分離を必要としているかどうかを判断してください。 分離レベル (WriteSerializable と Serializable) を参照してください。
Delta Lakeは、読み取りと書き込みの間でのACIDトランザクションを保証します:
- ライター: 複数のクラスターにまたがる複数のライターは、テーブル パーティションを同時に変更できます。 ライターは、テーブルの一貫したスナップショット ビューを表示し、書き込みをシリアル順序で行います。
- 閲覧者: リーダーは、ジョブ中にテーブルが変更された場合でも、Azure Databricks ジョブが開始したテーブルの一貫したスナップショット ビューを引き続き表示します。
「Azure Databricks での ACID 保証とは」を参照してください。
注
Azure Databricks では、既定ですべてのテーブルに Delta Lake が使用されます。
分離に関するトピック
| トピック | 説明 |
|---|---|
| 分離レベル (WriteSerializable および Serializable) | 2 つの分離レベルが同時実行操作に与える影響とその構成方法。 |
| 行レベルの並行処理 | 行レベルの競合検出によって、同じデータ ファイルに対する同時操作の書き込み競合が軽減されるしくみ。 |
トランザクションの分離、スナップショットの動作、および競合の処理については、「 トランザクションの分離」を参照してください。
メタデータ変更の競合
メタデータの変更により、すべての同時書き込み操作が失敗することがあります。 これらの操作には、テーブル プロトコル、テーブル プロパティ、またはデータ スキーマの変更が含まれます。
ストリーミング読み取りは、テーブルメタデータを変更するコミットに遭遇すると失敗します。 ストリームを続行する場合は、ストリームを再起動する必要があります。 推奨される方法については、「 構造化ストリーミングの運用に関する考慮事項」を参照してください。
メタデータを変更するクエリの例には以下があります:
-- Set a table property
ALTER TABLE table_name SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')
-- Enable a feature using a table property and update the table protocol
ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
-- Drop a table feature
ALTER TABLE table_name DROP FEATURE deletionVectors;
-- Upgrade to UniForm
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
-- Update the table schema
ALTER TABLE table_name ADD COLUMNS (col_name STRING);