在 Dataform 中,表是构成工作流的对象类型之一。您可以创建引用工作流声明的数据源中的数据或工作流中其他表中的数据的表。Dataform 会实时将表定义编译为 SQL。触发执行后,Dataform 会运行 SQL 代码并在 BigQuery 中创建您定义的表。
您可以在 type: "table" SQLX 文件中创建以下类型的表:
您还可以定义表分区和聚簇。
为了记录表格的用途或其与工作流程中其他表格的关系,您可以向表格或其所选列添加文档。
如需根据特定条件测试表中的数据,您可以创建称为断言的数据质量测试查询。Dataform 每次更新工作流时都会运行断言,并在任何断言失败时提醒您。
如需替换所选表的默认架构、数据库和名称,您可以替换表设置。
如需停用表创建功能,或在创建表之前或之后运行 SQL 语句,您可以配置其他操作。
如需在运行后整理 BigQuery 中的表,您可以添加 BigQuery 标签。 如需了解详情,请参阅标签简介。
如需在表列级别限制数据访问权限,您可以添加 BigQuery 政策标记。如需了解详情,请参阅列级访问权限控制简介。
除了在 type: "table" SQLX 文件中定义表之外,您还可以在 type: "operations" SQLX 文件中定义自定义 SQL 查询,以创建空表。您可能需要创建一个空表,以便其他服务可以向其中填充数据。
准备工作
在 Google Cloud 控制台中,前往 Dataform 页面。
可选:声明数据源。
所需的角色
如需获得完成本文档中的任务所需的权限,请让您的管理员为您授予工作区的 Dataform Editor (roles/dataform.editor) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
创建表
本部分介绍了如何在 Dataform 中使用 Dataform 核心创建表。
关于表定义
如需定义表,您需要在 type: "table" SQLX 文件中定义表类型并编写 SELECT 语句。然后,Dataform 会将您的 Dataform 核心代码编译为 SQL,运行该 SQL 代码,并在 BigQuery 中创建您定义的表。
在 Dataform 核心 SELECT 语句中,您可以定义表结构并引用工作流的其他对象。
除了在 type: "table" SQLX 文件中定义表之外,您还可以在 type: "operations" SQLX 文件中定义自定义 SQL 查询,以创建空表。如需了解详情,请参阅创建空表。
使用 ref 引用依赖项
如需在 SELECT 语句中引用工作流操作并自动将其添加为依赖项,请使用 ref 函数。Dataform 会在依赖项所依赖的表之前运行这些依赖项,以验证流水线顺序是否正确。
ref 函数是一个内置的 Dataform 核心函数,对于 Dataform 中的依赖项管理至关重要。借助 ref 函数,您可以引用 Dataform 工作流中定义的以下对象并自动依赖这些对象,而无需对架构和表名称进行硬编码:
- 所有受支持的表类型的表。
- 数据源声明。
- 将
hasOutput属性设置为true的自定义 SQL 操作。
Dataform 使用 ref 函数来构建要创建或更新的所有表的依赖关系树。
编译后,Dataform 会向 SQL 语句添加样板语句,例如 CREATE、REPLACE、INSERT 或 MERGE。
以下代码示例展示了使用 ref 函数的表定义:
config { type: "table" }
SELECT
order_date AS date,
order_id AS order_id,
order_status AS order_status,
SUM(item_count) AS item_count,
SUM(amount) AS revenue
FROM ${ref("store_clean")}
GROUP BY 1, 2
在 ref 函数中,您需要提供要依赖的表或数据源声明的名称。这通常是定义相应表或数据源声明的 SQLX 文件的文件名。
如果表名称被替换,请在 ref 函数中使用替换后的名称。例如,将具有 config { name: "overridden_name" } 的表引用为 ref("overridden_name")。如需了解详情,请参阅替换表设置和引用具有替换表名称的表。
如果您在不同的架构中拥有多个同名表,则可以通过向 ref 函数提供两个实参(架构名称和表名称)来引用特定表。
以下代码示例展示了带有两个实参的 ref 函数,用于指定特定架构中的表:
config { type: "table" }
SELECT * FROM ${ref("schema", "store_clean")}
您还可以手动向 config 块添加表依赖项,以用于未在 SELECT 语句的 ref 函数中引用的表、断言、数据源声明或自定义 SQL 操作。Dataform 会在运行依赖表之前运行这些依赖项。
以下代码示例展示了 config 块中的表依赖关系:
config { dependencies: [ "unreferenced_table" ] }
SELECT * FROM ...
如需详细了解工作流中的依赖项管理,请参阅设置依赖项。
使用 resolve 引用其他表格
借助 resolve 函数,您可以在 SELECT 语句中引用表或数据源声明,就像使用 ref 函数一样,但它不会将引用添加为依赖项。这意味着,使用 resolve 函数引用的对象不会影响使用 resolve 函数的表的执行。
如需详细了解内置 Dataform 核心函数,请参阅 Dataform 核心参考文档。
创建用于表定义的 SQLX 文件
将表定义 SQLX 文件存储在 definitions/ 目录中。如需在 definitions/ 目录中创建新的 SQLX 文件,请按照以下步骤操作:
在 Google Cloud 控制台中,前往 Dataform 页面。
如需打开代码库,请点击相应代码库的名称。
如需打开开发工作区,请点击相应的工作区名称。
在文件窗格中,点击
definitions/旁边的更多。点击创建文件。
在添加文件路径字段中,输入文件名称,然后在
definitions/后面输入.sqlx。例如definitions/my-table.sqlx。文件名只能包含数字、字母、连字符和下划线。
点击创建文件。
定义表格类型
如需创建新的表格类型定义,请按以下步骤操作:
- 在开发工作区的文件窗格中,展开
definitions/目录。 - 选择要修改的表定义 SQLX 文件。
在文件中输入以下代码段:
config { type: "TABLE_TYPE" }将 TABLE_TYPE 替换为以下某个表格类型:
tableincrementalview
可选:如需定义具体化视图,请按以下格式在
type: "view"下输入materialized属性:config { type: "view", materialized: true }如需了解详情,请参阅 ITableConfig。
可选:点击格式。
定义表结构和依赖项
如需编写表定义 SELECT 语句并定义表结构和依赖项,请按以下步骤操作:
- 在开发工作区的文件窗格中,展开
definitions/目录。 - 选择要修改的表定义 SQLX 文件。
- 在
config代码块下方,编写SELECT语句。 - 可选:点击格式。
以下代码示例展示了包含 SELECT 语句和 ref 函数的表定义:
config { type: "table" }
SELECT
customers.id AS id,
customers.first_name AS first_name,
customers.last_name AS last_name,
customers.email AS email,
customers.country AS country,
COUNT(orders.id) AS order_count,
SUM(orders.amount) AS total_spent
FROM
dataform-samples.dataform_sample.crm_customers AS customers
LEFT JOIN ${ref('order_stats')} orders
ON customers.id = orders.customer_id
WHERE
customers.id IS NOT NULL
AND customers.first_name <> 'Internal account'
AND country IN ('UK', 'US', 'FR', 'ES', 'NG', 'JP')
GROUP BY 1, 2, 3, 4, 5
添加手动表格依赖项
如需添加未在 SELECT 语句中引用但需要在当前表之前运行的表依赖项,请按照以下步骤操作:
- 在开发工作区的文件窗格中,展开
definitions/目录。 - 选择要修改的表定义 SQLX 文件。
在表格的
config代码块中,输入以下代码段:dependencies: [ "DEPENDENCY_TABLE", ]将 DEPENDENCY_TABLE 替换为您要添加为依赖项的表的文件名。您可以输入多个文件名。
可选:点击格式。
以下代码示例展示了如何将两个表作为手动表依赖项添加到表定义文件的 config 块中:
config { dependencies: [ "some_table", "some_other_table" ] }
覆盖表格设置
您可以替换所选表的默认架构、数据库和名称。
默认情况下,表会遵循您在 workflow_settings.yaml 中设置的架构和数据库配置。表的名称与表定义 SQLX 文件的名称相同。
如需替换所选表的架构和名称,请按以下步骤操作:
前往您的开发工作区。
在文件窗格中,展开
definitions/。打开 SQLX 表定义文件。
在
config块中,输入以下代码段:{ schema: "OVERRIDDEN_SCHEMA", database: "OVERRIDDEN_DATABASE", name: "OVERRIDDEN_NAME" }替换以下内容:
OVERRIDDEN_SCHEMA:要在其中创建表的 BigQuery 数据集。OVERRIDDEN_DATABASE:您要在其中创建表的 BigQuery 项目的 ID。OVERRIDDEN_NAME:表的名称,与 SQLX 表定义文件名不同。
可选:点击格式。
如需了解详情,请参阅引用具有替换表名称的表。