Dataform 中的 JavaScript 简介

本文档可帮助您了解如何使用 JavaScript 在 Dataform 中开发 SQL 工作流。

借助 Dataform Core,您可以使用 SQLX 和 JavaScript 创建 SQL 工作流对象。虽然并非强制性要求,但您可以使用 JavaScript 和 SQLX 在工作流中重复创建类似的元素。例如,借助 JavaScript,您可以在移除某些用户 ID 后,为工作流中的每个表创建视图。您还可以仅使用 JavaScript 开发 SQL 工作流对象。

如需开始使用 JavaScript 开发 Dataform SQL 工作流,您必须熟悉 JavaScript 语法和以下 JavaScript 概念:

  • 变量
  • 数组
  • 条件语句
  • For 循环
  • Maps
  • Functions
  • 对象
  • 导出和导入模块

将 JavaScript 代码添加到 SQLX 文件

您可以通过以下两种方式将 JavaScript 代码添加到 SQLX 文件:内嵌或在 JavaScript 代码块内。

您可以使用 JavaScript 代码块定义 SQLX 文件中的函数或常量。您可以使用内嵌 JavaScript 动态修改 SQLX 或 SQL 查询。

以下代码示例展示了以内嵌方式添加到 SQLX 文件的 post_operations 代码块中的 self Dataform 核心内置 JavaScript 函数:

config {type: "table"}

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer`
  ON
  TABLE ${self()}
  TO "group:allusers@example.com", "user:otheruser@example.com"
}

以下代码示例展示了在 JavaScript 块中定义的一个常量,该常量在 SQLX 文件中的查询内以内嵌方式使用:

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

通过 JavaScript 重复使用代码

您可以重复使用 JavaScript 代码来简化 Dataform 中的开发工作。如需在单个 SQLX 文件中重复使用 JavaScript 常量和函数,您可以将其封装在 JavaScript 块中。如需在单个 Dataform 代码库中重复使用 JavaScript 代码,您可以创建 include 代码。如需在多个 Dataform 代码库中重复使用 JavaScript 代码,您可以创建或导入软件包。

通过 JavaScript 封装,在单个 SQLX 文件中重复使用代码

如需创建可在单个 SQLX 文件中重复使用的重复性 SQL 代码部分,您可以将函数和常量封装在 JavaScript 块中。您只能在已定义 JavaScript 代码块的 SQLX 文件内部重复使用在该代码块中定义的代码。如需了解详情,请参阅 Dataform 核心概览

以下代码示例展示了在 JavaScript 块中定义的并在 SQLX 文件中的查询内内嵌使用的常量和函数:

js {
 const foo = 1;
 function bar(number){
     return number+1;
 }
}

select
 ${foo} as one,
 ${bar(foo)} as two

使用 include 功能在单个代码库中重复使用代码

包含元素是对代码库而言全局 JavaScript 常量或函数。您可以在代码库的 includes 目录中定义 include 文件。然后,您可以在整个代码库中的 JavaScript 和 SQLX 文件中重复使用它们。

以下代码示例展示了 includes/constants.js 文件中 launch_date 常量的定义:

// filename is includes/constants.js
const launch_date = "11.11.2011";
module.exports = { launch_date };

以下代码示例显示了 SQLX 文件的表定义查询中引用的 launch_date 常量:

config {type: "table"}

SELECT * FROM source_table WHERE date > ${constants.launch_date}

使用软件包在多个代码库中重复使用代码

软件包是可跨多个 Dataform 代码库导入和使用的 JavaScript 代码的集合,以简化 SQL 工作流的开发过程。

您可以在 Dataform 中创建自己的自定义软件包,也可以使用 GitHub 开源 Dataform 页面上的某个开源 Dataform 软件包。

如需查看在 Dataform 中使用开源软件包的示例,请参阅在 Dataform 中使用“缓慢变化维度”

为了能够在 Dataform 中使用软件包的内容,您需要在 Dataform 代码库中安装该软件包,然后将其导入到要在其中使用该软件包的各个 JavaScript 或 SQLX 文件中。如需了解详情,请参阅在 Dataform 中安装软件包

为了能够在 Dataform 代码库中安装专用 NPM 软件包,您需要对该软件包进行身份验证

使用 JavaScript 创建 SQL 工作流

作为在 SQLX 中开发 SQL 工作流或者将 SQLX 与 JavaScript 结合使用的替代方案,您可以仅使用 JavaScript 在 .js 文件中创建 SQL 工作流对象。您可以使用 Dataform 全局方法和任意 JavaScript ES5 代码(例如循环和常量)在一个 JavaScript 文件中创建多个 SQL 工作流对象。每个 Dataform 全局 JavaScript 方法都包含可用于配置所创建对象的属性。

您可以在 Dataform 中仅使用 JavaScript 来创建以下 SQL 工作流对象:

  • 数据源声明
  • 手动断言
  • Tables
  • 手动断言
  • 自定义 SQL 操作

如需详细了解如何仅使用 JavaScript 创建 SQL 工作流对象,请参阅使用 JavaScript 创建 Dataform SQL 工作流

后续步骤