开发 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
数据集读取数据,但配置为包含用于创建特定于环境的数据集的笔记本。