开发 Delta Live Tables 管道

开发和测试管道代码与其他 Apache Spark 工作负载不同。 本文概述了开发管道代码时支持的功能、最佳做法和注意事项。 有关更多建议和最佳实践,请参阅 将软件开发 & DevOps 最佳实践应用于 Delta Live Table 管道

注意

必须将源代码添加到管道配置,以验证代码或运行更新。 请参阅配置 Delta Live Tables 管道

哪些文件对管道源代码有效?

增量实时表管道代码可以是 Python 或 SQL。 可以混合使用支持单个管道的 Python 和 SQL 源代码文件,但每个文件只能包含一种语言。 请参阅 使用 Python 开发管道代码,使用 SQL开发管道代码。

指定管道的源代码时,可以使用笔记本和工作区文件。 工作区文件表示在首选 IDE 或 Databricks 文件编辑器中创作的 Python 或 SQL 脚本。 请参阅 什么是工作区文件?

如果将 Python 代码开发为模块或库,则必须安装和导入代码,然后从配置为源代码的 Python 笔记本或工作区文件调用方法。 请参阅 管理 Delta Live Tables 管道的 Python 依赖项

注意

如果需要在 Python 笔记本中使用任意 SQL 命令,可以使用语法模式 spark.sql("<QUERY>") 以 Python 代码的形式运行 SQL。

Unity 目录函数允许注册任意 Python 用户定义的函数,以便在 SQL 中使用。 请参阅 Unity 目录 中的用户定义的函数(UDF)。

Delta Live Tables开发功能概览

Delta实时表扩展并利用了许多 Azure Databricks 的功能,同时引入了新的功能和概念。 下表简要概述了支持管道代码开发的概念和功能:

功能 描述
开发模式 默认情况下,新管道配置为在开发模式下运行。 Databricks 建议使用开发模式进行交互式开发和测试。 请参阅 开发和生产模式
驗證 Validate 更新验证管道源代码的正确性,而无需在任何表上运行更新。 请参阅检查管道是否存在错误,而无需等待表更新
笔记本 配置为 Delta Live Tables 管道源代码的笔记本提供交互功能,以便验证代码和进行更新。 请参阅在笔记本中开发和调试 Delta Live Tables 管道
参数 利用源代码和管道配置中的参数来简化测试和扩展性。 请参阅将参数与 Delta Live Tables 管道搭配使用
Databricks 资产捆绑包 Databricks 资产捆绑包允许在工作区之间移动管道配置和源代码。 请参阅将 Delta Live Tables 管道转换为 Databricks 资产捆绑包项目

创建用于开发和测试的示例数据集

Databricks 建议创建开发和测试数据集,以测试管道逻辑,所用数据包括预期数据以及可能格式不正确或损坏的记录。 有多种方法可以创建可用于开发和测试的数据集,包括:

  • 从生产数据集中选择一部分数据。
  • 对包含 PII 的源使用匿名或人为生成的数据。
  • 基于下游转换逻辑创建具有定义良好的结果的测试数据。
  • 通过创建破坏数据架构期望的记录来预测潜在的数据损坏、格式不正确的记录和上游数据更改。

例如,如果你有一个使用以下代码定义数据集的笔记本:

CREATE OR REFRESH STREAMING TABLE input_data AS SELECT * FROM read_files("/production/data", "json")

可以使用如下所示的查询创建包含特定记录的示例数据集:

CREATE OR REFRESH MATERIALIZED VIEW input_data AS
SELECT "2021/09/04" AS date, 22.4 as sensor_reading UNION ALL
SELECT "2021/09/05" AS date, 21.5 as sensor_reading

以下示例演示如何筛选已发布的数据,以创建用于开发或测试的生产数据的子集:

CREATE OR REFRESH MATERIALIZED VIEW input_data AS SELECT * FROM prod.input_data WHERE date > current_date() - INTERVAL 1 DAY

若要使用这些不同的数据集,请使用实现转换逻辑的笔记本创建多个管道。 每个管道都可以从 input_data 数据集读取数据,但配置为包含用于创建特定于环境的数据集的笔记本。