在 Dataform 中创建软件包

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

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

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

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

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

准备工作

  1. 在 Google Cloud 控制台中,进入 Dataform 页面。

    前往 Dataform 页面

  2. 为您的软件包创建一个 Dataform 仓库。将代码库名称与软件包名称进行匹配。

  3. 代码库连接到将托管软件包的第三方 Git 代码库。

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

所需的角色

如需获得创建软件包所需的权限,请让您的管理员为您授予代码库的 Dataform Admin (roles/dataform.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

在 Dataform 中创建软件包

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

  1. 文件窗格中,点击 更多菜单。

  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. 提交推送您的更改。

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

后续步骤