本文档介绍了如何通过声明依赖项在 Dataform 中定义 SQL 工作流中对象之间的关系。
您可以在 SQL 工作流的对象之间定义依赖关系。在依赖关系中,依赖对象的执行取决于依赖项对象的执行。这意味着 Dataform 会在依赖项之后执行依赖项。您可以通过在依赖对象的 SQLX 定义文件中声明依赖项来定义这种关系。
依赖项声明构成了 SQL 工作流的依赖项树,该树决定了 Dataform 执行 SQL 工作流对象的顺序。
您可以定义以下 SQL 工作流对象之间的依赖关系:
- 数据源声明
- BigQuery 数据源的声明,可让您在 Dataform 表定义和 SQL 操作中引用这些数据源。您可以将数据源声明设置为依赖项,但不能将其设置为依赖项。
- 表
- 您在 Dataform 中根据声明的数据源或 SQL 工作流中的其他表创建的表。Dataform 支持以下表类型:表、增量表、视图和具体化视图。您可以将表设置为依赖项和依赖项。
- 自定义 SQL 操作
- Dataform 在 BigQuery 中按原样运行的 SQL 语句,无需修改。您可以将
type: operations
文件中定义的自定义 SQL 操作设置为依赖项和依赖项。如需在ref
函数中将自定义 SQL 操作声明为依赖项,您需要在自定义 SQL 操作 SQLX 定义文件中将hasOutput
属性设置为true
。 - 断言
- 可用于测试表数据的数据质量测试查询。每次更新 SQL 工作流时,Dataform 都会运行断言,如果任何断言都失败,系统会向您发出提醒。您可以通过在
config
代码块中声明依赖项,将type: assertion
文件中定义的断言设置为依赖项和依赖项。
您可以通过以下方式定义依赖项关系:
准备工作
所需的角色
如需获得为表、断言、数据源声明和自定义 SQL 操作声明依赖项所需的权限,请让您的管理员向您授予工作区的 Dataform Editor (roles/dataform.editor
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
将依赖项声明为 ref
函数的参数
如需在 SELECT
语句中引用和自动声明依赖项,请将依赖项添加为 ref
函数的实参。
ref
函数是 Dataform 核心内置函数,可让您在 SQL 工作流中将 hasOutput
属性设置为 true
,以引用并自动依赖于任何表、数据源声明或自定义 SQL 操作。
如需详细了解 ref
函数,请参阅 Dataform 核心上下文方法参考文档。
如需详细了解如何在表定义中使用 ref
函数,请参阅表定义简介。
以下代码示例展示了在增量表的 incremental_table.sqlx
SQLX 定义文件中,将 source_data
数据源声明添加为 ref
函数的参数:
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
在前面的代码示例中,source_data
会自动声明为 incremental_table
的依赖项。
以下代码示例显示了在断言的 custom_assertion.sqlx
SQLX 定义文件中将 some_table
表定义 SQLX 文件添加为 ref
函数的参数:
// filename is custom_assertion.sqlx
config { type: "assertion" }
SELECT
*
FROM
${ref("some_table")}
WHERE
a is null
or b is null
or c is null
在前面的代码示例中,some_table
会自动声明为 custom_assertion
的依赖项。在执行过程中,Dataform 会先执行 some_table
,然后在创建 some_table
后执行 custom_assertion
。
在 config
代码块中声明依赖项
如需声明在依赖项的 SQL 语句定义中未引用但需要在表、断言或自定义 SQL 操作之前执行的依赖项,请按以下步骤操作:
- 在开发工作区中的 Files 窗格中,展开
definitions/
目录。 - 选择要修改的表、断言或自定义 SQL 操作 SQLX 文件。
在文件的
config
代码块中,输入以下代码段:dependencies: [ "DEPENDENCY", ]
将 DEPENDENCY 替换为字符串目标,例如您要添加为依赖项的操作的文件名。您可以输入多个目标,用英文逗号分隔。
可选:点击格式。
以下代码示例显示了将 some_table
表和 some_assertion
断言添加为表定义文件的 config
块的依赖项:
config { dependencies: [ "some_table", "some_assertion" ] }
后续步骤
- 如需了解如何将断言设置为依赖项,请参阅使用断言测试表。
- 如需了解如何声明数据源,请参阅声明数据源。
- 如需了解如何定义自定义 SQL 操作,请参阅添加自定义 SQL 操作。
- 如需了解如何使用包含在整个 SQL 工作流中重复使用代码,请参阅使用包含在单个代码库中重复使用代码。