在 Dataform 中创建软件包

本文档介绍了如何创建自定义 JavaScript 软件包,以用于在 Dataform 中开发 SQL 工作流。

如需创建可在多个 Dataform 代码库中重复使用的软件包,您需要创建一个专用于该软件包的 Dataform 代码库,并将其连接到第三方 Git 代码库,使其可供其他 Dataform 代码库使用。

然后,您需要创建一个顶级 index.js 文件,并将可导出的软件包内容(如函数和常量)添加到该文件中。如需查看在 Dataform 中创建的软件包示例,请参阅 GitHub 上的 dataform-package-base

创建软件包后,您可以将该软件包安装到不同的 Dataform 代码库中,并在软件包上使用可导出的内容(例如常量和函数)来开发 SQL 工作流。

除了创建软件包之外,您还可以在包含 include 的单个 Dataform 代码库中重复使用 JavaScript 函数和常量。如需了解详情,请参阅在 Dataform 中通过 include 重复使用变量和函数

准备工作

  1. 在 Google Cloud 控制台中,转到 Dataform 页面。

    转到 Dataform 页面

  2. 为您的软件包创建 Dataform 代码库。使代码库名称与您的软件包的名称保持一致。

  3. 将代码库关联到将托管您的软件包的第三方 Git 代码库。

  4. 在 Dataform 代码库中创建并初始化工作区

所需的角色

如需获取创建软件包所需的权限,请让管理员向您授予代码库的 Dataform Admin (roles/dataform.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

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

在 Dataform 中创建软件包

如需使用可在 Dataform 中重复使用的 JavaScript 代码创建自己的软件包,请在工作区中执行以下步骤:

  1. Files 窗格中,点击 More 菜单。

  2. 点击创建文件

    1. 创建新文件窗格中,执行以下操作:

    2. 添加文件路径字段中,输入 index.js

    3. 点击创建文件

  3. index.js 文件中,输入您希望软件包导出的 JavaScript 代码。

    1. 按以下格式创建常量:

      const CONSTANT_NAME = CONSTANT_VALUE;
      module.exports = { CONSTANT_NAME };
      

      替换以下内容:

      • CONSTANT_NAME:常量的名称
      • CONSTANT_VALUE:常量的值
    2. 请按以下格式创建函数:

    function FUNCTION_NAME(PARAMETERS) { FUNCTION_BODY }
    
    module.exports = { FUNCTION_NAME }
    

    替换以下内容:

    • FUNCTION_NAME:函数的名称
    • PARAMETERS:函数的参数
    • FUNCTION_BODY:您希望函数执行的代码
  4. 可选:点击格式

  5. 可选:在 definitions 目录中,添加不会被导出的软件包的代码。

  6. 提交push您的更改。

以下软件包代码示例展示了导出 getDomain 函数的 postoffice 软件包的 index.js 文件:

// filename index.js
// package name postoffice

const GENERIC_DOMAINS = "('samplemail.com','samplemail.co.uk','examplemailbox.com'";

function getDomain(email) {
  let cleanEmail = `trim(${email})`
  const domain = `substr(${cleanEmail}, strpos(${cleanEmail}, '@') + 1)`;
  return `case
            when ${domain} in ${common.GENERIC_DOMAINS} then ${cleanEmail}
            when ${domain} = "othermailbox.com" then "other.com"
            when ${domain} = "mailbox.com" then "mailbox.global"
            when ${domain} = "support.postman.com" then "postman.com"
            else ${domain}
          end`;
}

module.exports = { getDomain }

后续步骤