本文概述了 LIVE
虚拟架构的旧语法和行为。
虚拟 LIVE
架构是 Lakeflow 声明性管道的旧功能,被视为已弃用。 对于使用此模式创建的管道,仍可以使用旧版发布模式和 LIVE
虚拟架构。
Databricks 建议将所有管道迁移到新的发布模式。 有两种迁移选择:
- 将表(包括具体化视图和流式处理表)从旧管道移动到使用默认发布模式的管道。 若要了解如何在管道之间移动表,请参阅在 Lakeflow 声明性管道之间移动表。
- 在当前使用旧发布模式的管道中启用默认发布模式。 请参阅 在管道中启用默认发布模式。
这两种方法都是单向迁移。 无法将表迁移回旧模式。
在 Azure Databricks 的未来版本中,将删除对旧版 LIVE
虚拟架构和旧版发布模式的支持。
注释
旧版发布模式管道在 Lakeflow 声明性管道设置 UI 的《摘要》字段中显示。 如果管道的 JSON 规范中设置了 target
字段,则你还可以确认管道是否使用旧发布模式。
不能使用管道配置 UI 通过旧版发布模式创建新管道。 如果需要使用旧 LIVE
语法部署新管道,请联系 Databricks 帐户代表。
什么是 LIVE 虚拟架构?
注释
在 Lakeflow 声明式管道的默认发布模式下,LIVE
虚拟架构不再需要用于分析数据集依赖关系。
架构 LIVE
是 Lakeflow 声明性管道中的编程概念,用于定义在管道中创建或更新的所有数据集的虚拟边界。 根据设计,LIVE
架构不直接绑定到已发布架构中的数据集。 相反,即使用户不想将数据集发布到架构,LIVE
架构也允许管道中的逻辑进行计划并运行。
在旧版发布模式管道中,可以使用 LIVE
关键字引用当前管道中的其他数据集进行读取,例如 SELECT * FROM LIVE.bronze_table
。 在新 Lakeflow 声明性管道的默认发布模式下,此语法将被无提示忽略,这意味着未限定的标识符使用当前架构。 请参阅 设置目标目录和数据库架构。
管道的旧发布模式
虚拟 LIVE
架构用于 Lakeflow 声明性管道的旧版发布模式。 在 2025 年 2 月 5 日之前创建的所有表默认使用旧版发布模式。
下表描述了在旧版发布模式下,所有在管道中创建或更新的具体化视图和流式处理表的行为:
存储选项 | 存储位置或目录 | 目标架构 | 行为 |
---|---|---|---|
Hive 元存储 | 未指定 | 未指定 | 数据集元数据和数据存储到 DBFS 根目录。 没有将数据库对象注册到 Hive 元存储。 |
Hive 元存储 | 云对象存储的 URI 或文件路径。 | 未指定 | 数据集元数据和数据将存储在指定的存储位置。 没有将数据库对象注册到 Hive 元存储。 |
Hive 元存储 | 未指定 | Hive 元存储中的现有或新架构。 | 数据集元数据和数据存储到 DBFS 根目录。 管道中的所有具体化视图和流式处理表都发布到 Hive 元存储中的指定架构。 |
Hive 元存储 | 云对象存储的 URI 或文件路径。 | Hive 元存储中的现有或新架构。 | 数据集元数据和数据将存储在指定的存储位置。 管道中的所有具体化视图和流式处理表都发布到 Hive 元存储中的指定架构。 |
统一目录 | 现有的 Unity Catalog 目录。 | 未指定 | 数据集元数据和数据存储在与目标目录关联的默认存储位置。 没有将数据库对象注册到 Unity 目录。 |
统一目录 | 现有的 Unity Catalog 目录。 | Unity Catalog 中的现有或新架构。 | 数据集元数据和数据存储在与目标架构或目录关联的默认存储位置。 管道中的所有具体化视图和流式处理表都发布到 Unity Catalog 中的指定架构。 |
根据LIVE模式更新源代码
配置为使用新的默认发布模式运行的管道会悄无声息地忽略 LIVE
方案语法。 默认情况下,所有表读取都使用管道配置中指定的目录和架构。
对于大多数现有管道,此行为更改没有影响,因为旧版 LIVE
虚拟架构行为也会将读取定向到管道配置中指定的目录和架构。
重要
使用工作区默认目录和架构进行读取的旧代码需要进行代码更新。 请考虑下面的具体化视图定义:
CREATE MATERIALIZED VIEW silver_table
AS SELECT * FROM raw_data
在旧版发布模式下,raw_data
表中未经限定的读取使用工作区默认的目录和架构,例如 main.default.raw_data
。 在新的默认管道模式下,默认情况下使用的目录和架构是在管道配置中配置的。 若要确保此代码继续按预期工作,请更新引用以使用表的完全限定标识符,如以下示例所示:
CREATE MATERIALIZED VIEW silver_table
AS SELECT * FROM main.default.raw_data
与 Unity Catalog 旧版发布模式流水线的事件日志一起工作
重要
event_log
TVF 可用于将表发布到 Unity Catalog 的旧发布模式管道。 新管道的默认行为会将事件日志发布到为管道配置的目标目录和架构。 请参阅查询事件日志。
配置了 Hive 元存储的表也具有不同的事件日志支持和行为。 请参阅使用 Hive 元存储管道的事件日志。
如果管道使用旧版发布模式将表发布到 Unity 目录,则必须使用 event_log
表值函数 (TVF) 提取管道的事件日志。 通过将管道 ID 或表名称传递给 TVF 来检索管道的事件日志。 例如,若要检索 ID 为 04c78631-3dd7-4856-b2a6-7d84e9b2638b
的管道的事件日志记录,请执行以下命令:
SELECT * FROM event_log("04c78631-3dd7-4856-b2a6-7d84e9b2638b")
若要检索创建或拥有表 my_catalog.my_schema.table1
的管道的事件日志记录,请执行以下命令:
SELECT * FROM event_log(TABLE(my_catalog.my_schema.table1))
若要调用 TVF,必须使用共享群集或 SQL 仓库。 例如,可以使用连接到共享群集的笔记本,也可以使用连接到 SQL 仓库的 SQL 编辑器。
为了简化对管道事件的查询,管道所有者可以通过 event_log
TVF 创建视图。 以下示例创建管道事件日志的视图。 此视图用于本文中包含的示例事件日志查询。
注释
-
event_log
TVF 只能由管道所有者调用。 - 不能在管道或查询中使用
event_log
表值函数访问多个管道的事件日志。 - 不能与其他用户共享通过
event_log
表值函数创建的视图。
CREATE VIEW event_log_raw AS SELECT * FROM event_log("<pipeline-ID>");
将 <pipeline-ID>
替换为管道的唯一标识符。 可以在 Lakeflow 声明性管道 UI 的 “管道详细信息 ”面板中找到 ID。
管道运行的每个实例称为更新。 你通常需要提取有关最近更新的信息。 运行以下查询以查找最新更新的标识符,并将其保存在 latest_update_id
临时视图中。 此视图用于本文中包含的示例事件日志查询:
CREATE OR REPLACE TEMP VIEW latest_update AS SELECT origin.update_id AS id FROM event_log_raw WHERE event_type = 'create_update' ORDER BY timestamp DESC LIMIT 1;