隔離層級與寫入衝突行為決定當同時在 Azure Databricks 上讀寫同一個 Delta Lake 資料表時會發生什麼。
當多個工作或使用者同時寫入同一資料表時,部分寫入可能會因衝突例外而失敗。 當你需要時,請使用本節的頁面:
- 解決或減少並發寫入的失敗,例如
ConcurrentAppendException。 參見 衝突例外。 - 判斷一個表格是否需要比預設更強的隔離。 參見隔離層級(WriteSerializable 與 Serializable)。
Delta Lake 保證讀取與寫入之間的 ACID 事務:
- 寫入者:多個叢集的寫入者可以同時修改一個資料表分割區。 寫入器會看到數據表的一致快照集檢視,並以序列順序進行寫入。
- 讀者:讀者仍會看到 Azure Databricks 工作起始時所用資料表的一致快照視圖,即使工作中資料表被修改。
請參閱 什麼是 Azure Databricks 上的 ACID 保證?。
備註
根據預設,Azure Databricks 會針對所有數據表使用 Delta Lake。
隔離主題
| 主題 | 說明 |
|---|---|
| 隔離層級(可寫序列化與序列化) | 這兩種隔離層如何影響並行操作,以及如何配置它們。 |
| 列層級併發 | 資料列層級衝突偵測如何降低同一資料檔案上同時操作的寫入衝突。 |
關於交易隔離、快照行為及衝突處理的資訊,請參見 交易隔離。
元資料變更衝突
中繼資料變更可能導致所有同時寫入操作失敗。 這些作業包括數據表通訊協議、數據表屬性或數據架構的變更。
串流讀取在遇到更改數據表元數據的提交時會失敗。 如果你想讓直播繼續,必須重新啟動。 如需建議的方法,請參閱 結構化串流的生產考慮。
改變元資料的查詢範例包括:
-- 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);