添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大气的扁豆  ·  TiDB ...·  2 年前    · 
逃课的硬币  ·  什么? ...·  2 年前    · 

表的隔离级别定义必须从并发操作所作修改中隔离事务的程度。 Azure Databricks 上的写入冲突取决于隔离级别。

Delta Lake 提供读写之间的 ACID 事务保证。 这表示:

  • 多个群集中的多个写入者可能同时修改某个表分区。 写入者会看到该表的一致快照视图,写入将按串行顺序发生。
  • 读者可以继续查看 Azure Databricks 作业开始时使用的表的一致性快照视图,即使在作业过程中修改了某个表也是如此。
  • 请参阅 Azure Databricks 上的 ACID 保证是什么?

    默认情况下,Azure Databricks 对所有表使用 Delta Lake。 本文介绍 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);
                  写入与行级别并发冲突
    

    行级并发可检测行级更改,并自动解决当并发写入操作更新或删除同一数据文件中的不同行时发生的冲突,因而可以降低并发写入操作之间的冲突。

    行级并发在 Databricks Runtime 14.2 及更高版本上已正式发布。 对于以下条件,默认情况下支持行级并发:

  • 启用了删除向量且未分区的表。
  • 使用液态聚类的表,除非已禁用删除向量。
  • 具有分区的表不支持行级并发,但当启用了删除矢量时,仍可以避免 OPTIMIZE 与所有其他写入操作之间的冲突。 请参阅行级别并发的限制

    对于其他 Databricks Runtime 版本,请参阅行级并发预览行为(旧版)

    对行级并发的 MERGE INTO 支持需要 Databricks Runtime 14.2 中的 Photon。 在 Databricks Runtime 14.3 LTS 及更高版本中,不需要 Photon。

    下表说明了在每个启用了行级别并发的隔离级别可能出现冲突的操作对。

    包含标识列的表不支持并发事务。 请参阅在 Delta Lake 中使用标识列

    (1) 上表中的所有 INSERT 操作描述了在提交之前不会从同一表读取任何数据的追加操作。 包含读取同一表的子查询的 INSERT 操作支持与 MERGE 相同的并发性。

    在重写数据文件时,REORG 操作的隔离语义与 OPTIMIZE 完全相同,以反映在删除向量中记录的更改。 使用 REORG 应用升级时,表协议会更改,这与所有正在进行的操作冲突。

    在没有行级别并发的情况下发生写入冲突

    下表说明了在每个隔离级别可能出现冲突的操作对。

    如果表定义了分区或未启用删除矢量,则表不支持行级并发。 要实现行级并发,需要 Databricks Runtime 14.2 或更高版本。

    包含标识列的表不支持并发事务。 请参阅在 Delta Lake 中使用标识列

    (1) 上表中的所有 INSERT 操作描述了在提交之前不会从同一表读取任何数据的追加操作。 包含读取同一表的子查询的 INSERT 操作支持与 MERGE 相同的并发性。

    在重写数据文件时,REORG 操作的隔离语义与 OPTIMIZE 完全相同,以反映在删除向量中记录的更改。 使用 REORG 应用升级时,表协议会更改,这与所有正在进行的操作冲突。

    行级别并发的限制

    行级别并发存在一些限制。 进行以下操作时,冲突解决方法遵循 Azure Databricks 上写入冲突的普通并发。 请参阅在没有行级别并发的情况下发生写入冲突

  • 具有复杂条件子句的命令,包括以下命令:
  •