在 Dataform 中创建软件包

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

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

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

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

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

准备工作

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

    转到 Dataform 页面

  2. 创建一个专门用于软件包的 Dataform 代码库。将代码库名称与软件包的名称匹配。

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

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

所需的角色

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

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

在 Dataform 中创建软件包

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

  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. [可选] 在 definitions 目录中,添加不会导出的软件包的代码。

  5. 提交推送更改。

以下软件包代码示例展示了导出 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 }

后续步骤