本页介绍 Azure Databricks 上 Delta Lake 表的隔离级别和写入冲突行为。
Delta Lake 在读取和写入之间提供 ACID 事务保证:
- 编写器:跨多个群集的多个编写器可以同时修改表分区。 写入者会看到该表的一致快照视图,写入将按串行顺序发生。
- 读取者:即使在作业期间表被修改,读取者仍会看到作业启动时的 Azure Databricks 表的一致快照视图。
请参阅 Azure Databricks 上的 ACID 保证是什么?。
注释
默认情况下,Azure Databricks 对所有表使用 Delta Lake。
隔离主题
| 主题 | 说明 |
|---|---|
| 隔离级别(WriteSerializable 和 Serializable) | 这两个隔离级别如何影响并发操作以及如何配置它们。 |
| 行级并发 | 行级冲突检测如何减少同一数据文件上并发操作时的写入冲突。 |
有关事务隔离、快照行为和冲突处理的信息,请参阅 事务隔离。
元数据更改冲突
元数据更改会导致所有并发写入操作失败。 这些操作包括对表协议、表属性或数据架构的更改。
在流式读取过程中,如果遇到更改表元数据的提交操作,读取将会失败。 如果想要数据流继续,则必须重启它。 有关建议的方法,请参阅结构化流式处理的生产注意事项。
下面是更改元数据的查询示例:
-- 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);