声明依赖项

本文档介绍如何通过声明依赖项来定义 Dataform 中 SQL 工作流中对象之间的关系。

您可以定义 SQL 工作流的对象之间的依赖关系。在依赖关系中,依赖对象的执行取决于依赖对象的执行。这意味着 Dataform 会在实现依赖项之后执行依赖项。您可以通过在依赖对象的 SQLX 定义文件内声明依赖项来定义关系。

依赖项声明构成 SQL 工作流的依赖项树,该树确定 Dataform 执行 SQL 工作流对象的顺序。

您可以定义以下 SQL 工作流对象之间的依赖关系:

数据源声明
对 BigQuery 数据源的声明,可让您在 Dataform 表定义和 SQL 操作中引用这些数据源。您可以将数据源声明设置为依赖项,但不能设置为依赖项。
Tables
您基于声明的数据源或在 SQL 工作流中的其他表在 Dataform 中创建的表。Dataform 支持以下表类型:表、增量表、视图和具体化视图。您可以将表设置为依赖项和从属项。
自定义 SQL 操作
Dataform 按原样在 BigQuery 中运行的 SQL 语句,无需任何修改。您可以将 type: operations 文件中定义的自定义 SQL 操作设置为依赖项和从属项。如需在 ref 函数中将自定义 SQL 操作声明为依赖项,您需要在自定义 SQL 操作 SQLX 定义文件中hasOutput 属性设置为 true
断言
可用于测试表数据的数据质量测试查询。 每次更新 SQL 工作流时,Dataform 都会运行断言,并在任何断言失败时提醒您。您可以通过在 config 块中声明依赖项,将 type: assertion 文件中定义的断言设置为依赖项和依赖项。

您可以通过以下方式定义依赖关系关系:

准备工作

  1. 在您的代码库中创建并初始化开发工作区
  2. 可选:声明数据源
  3. 创建至少两个 SQL 工作流对象:断言数据源声明operations

所需的角色

如需获取为表、断言、数据源声明和自定义 SQL 操作声明依赖项所需的权限,请让管理员向您授予工作区的 Dataform Editor (roles/dataform.editor) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

将依赖项声明为 ref 函数的参数

如需在 SELECT 语句中引用并自动声明依赖项,请将依赖项添加为 ref 函数的参数。

ref 函数是 Dataform 核心内置函数,可让您在 SQL 工作流中将 hasOutput 属性设置为 true 时,引用并自动依赖于任何表、数据源声明或自定义 SQL 操作。

如需详细了解 ref 函数,请参阅 Dataform 核心上下文方法参考文档

如需详细了解如何在表定义中使用 ref 函数,请参阅关于表定义

以下代码示例展示了作为 ref 函数的参数添加到增量表的 incremental_table.sqlx SQLX 定义文件中的 source_data 数据源声明:

// filename is incremental_table.sqlx

config { type: "incremental" }

SELECT * FROM ${ref("source_data")}

在前面的代码示例中,系统会自动将 source_data 声明为 incremental_table 的依赖项。

以下代码示例显示了作为 ref 函数的参数添加到断言的 custom_assertion.sqlx SQLX 定义文件中的 some_table 表定义 SQLX 文件:

// 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 操作之前执行的依赖项,请按以下步骤操作:

  1. 在开发工作区的 Files 窗格中,展开 definitions/ 目录。
  2. 选择要修改的表、断言或自定义 SQL 操作 SQLX 文件。
  3. 在该文件的 config 块中,输入以下代码段:

    dependencies: [ "DEPENDENCY", ]
    

    DEPENDENCY 替换为您要作为依赖项添加的表、断言、数据源声明或自定义 SQL 操作的文件名。您可以输入多个文件名,并用英文逗号分隔。

  4. 可选:点击格式

以下代码示例展示了作为依赖项添加到表定义文件的 config 块中的 some_table 表和 some_assertion 断言:

config { dependencies: [ "some_table", "some_assertion" ] }

后续步骤