管理代码生命周期

本文档介绍了在 Google Cloud 控制台中管理代码生命周期的 Dataform:创建开发环境、预演环境和生产环境 以及为每个环境配置编译和执行设置。

创建 Dataform SQL 工作流的标准化生命周期 维护数据健全度并优化开发流程, 我们建议您:

  • 创建执行环境以隔离期间创建的表 从提供给最终用户的表中进行开发。

  • 配置发布和工作流配置以执行工作流 在生产环境中;也可以选择在预演环境中。

本文档介绍了用于隔离开发的解决方案 包含工作区编译替换的表和 配置预演环境和生产环境 版本配置工作流配置

借助这些解决方案,您可以在单个 Dataform 代码库和 Google Cloud 项目。您可以选择将 Dataform 代码库的多个副本,存储在不同的 Google Cloud 项目,每个项目对应代码的一个阶段 例如开发、预演和生产。这种方法 可让您自定义 Identity and Access Management 权限 在代码生命周期的每个阶段都发挥应有的作用

隔离执行环境的最佳实践

我们建议您隔离在开发 SQL 工作流期间创建的表 在 BigQuery 中的生产表中执行。 这样可以确保最终用户可以进入正式版轨道 并消除最终用户意外访问错误数据的风险。

您可以通过以下方式创建隔离的执行环境:

按架构拆分开发表和生产表
推荐小型团队使用。Dataform 创建 BigQuery 中具有不同架构的生产表。 Dataform 执行具有 相同后缀,表示它们是在开发期间创建的。 开发者可以覆盖彼此的开发表格。
按架构和 Google Cloud 项目拆分开发表和生产表
推荐中型团队使用。Dataform 创建 BigQuery 中不同架构和项目中的生产表。 Dataform 已发布所有开发表 在专用的 Google Cloud 开发项目中运行。 每个 Dataform 开发者都有自己独特的开发架构 表格。此解决方案消除了开发者 意外覆盖彼此的开发表。这种方法的缺点是 这种方法删除开发表和架构,然后重新创建 每个环境中的所有表可能需要更多时间。
为每个 Google Cloud 项目拆分开发表、预演表和生产表
推荐用于需要预演环境的大型团队或团队。 Dataform 会在一个专用区域内执行每个环境中的表 BigQuery 中的 Google Cloud 项目。此解决方案为您提供了 最大限度地控制代码生命周期。

所有解决方案都需要一个 Dataform 代码库 连接到单个第三方远程代码库

在所有解决方案中,开发者 手动触发开发执行 Dataform 工作区中。Dataform 在版本配置中自动编译生产表和暂存表, 并按照工作流配置中设置的频率执行这些任务。

按架构将开发和生产环境拆分

此解决方案会创建两个执行环境,其中 Dataform 将执行您的 SQL 工作流:开发和生产。 要按架构拆分开发表和生产表,您需要 工作流设置、工作区编译替换以及版本 配置。要安排生产环境的执行,您需要 创建工作流配置。

Dataform 执行具有 相同后缀,表示它们是在开发期间创建的。 Dataform 会执行架构中的所有生产表,并且不带任何后缀。

下表显示了将开发环境拆分为 具有一个开发架构的生产表(按架构划分):

设置 开发 生产
Google Cloud 项目 enterprise-analytics enterprise-analytics
Git 分支 工作区名称 main
工作区编译替换 架构后缀:dev -
版本配置 - production
工作流配置 - production

在此解决方案中,开发表和生产表存储在单个 Google Cloud 项目。

开发者在其 Dataform 工作区中手动触发执行。 在所有手动触发的执行中,Dataform 都会在 具有相同后缀(表示创建这些架构)的架构, 。开发者需要知道 覆盖彼此的表。

在 Dataform 中,开发者提交更改并将其推送到自定义 (远程代码库的分支)。然后,在第三方 Git 托管平台中 会提交拉取请求批准拉取请求会合并更改 远程代码库的 main 分支。

Dataform 会自动从 main 分支构建为编译结果,具体取决于 production 版本配置设置。

Dataform 会自动执行 production 编译结果 根据 production 工作流配置中设置的时间表。

如需实现此解决方案,请配置以下 Dataform 设置:

工作流程设置

工作流设置取决于您的 Dataform Core 版本 存储在 workflow_settings.yamldataform.json 中。如需了解详情,请参阅 配置 Dataform 工作流设置

workflow_settings.yaml 中,配置以下设置:

defaultProject: enterprise-analytics
defaultDataset: analytics

dataform.json 中,配置以下设置:

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-analytics"
}

工作区替换项

架构后缀:"dev"

版本配置

Git Commitish:"main"

如需安排 production 编译结果的执行, 创建工作流配置

开发流程示例

在这个例子中,开发者 Sasha 和 Kai 负责 同一个 Dataform 代码库。已连接 Dataform 代码库 远程第三方 Git 代码库

它们提交更改并将更改推送到远程代码库中的自定义分支; 名为 sashakai

下表显示了 Sasha、Kai、 和生产环境:

设置 萨沙 生产
Google Cloud 项目 enterprise-analytics enterprise-analytics enterprise-analytics
Git 分支 sasha kai main
架构 analytics_dev analytics_dev analytics

Sasha 按以下流程创建新表并将其部署到生产环境:

  1. 在 Dataform 工作区中,Sasha 创建了 user_stats.sqlx 表。
  2. 在工作区中,Sasha 手动触发表的执行。
  3. Dataform 会创建 enterprise-analytics.analytics_dev.user_stats 表中的 enterprise-analytics 中的 analytics_dev 架构 BigQuery 中的 Google Cloud 项目。
  4. 在工作区中,Sasha 提交更改并将其推送到 sasha 分支。
  5. 在远程代码库中,Sasha 提交了一个拉取请求。
  6. 在远程仓库中,Kai 审核并批准了拉取请求, 将更改合并到 main 分支。
  7. Dataform 会在 按指定频率发布 production 个版本。在下一次更新 production 编译结果,Dataform 会将 enterprise-analytics.analytics.user_stats 表与编译结果相关联。
  8. 在按计划执行工作流配置期间,Dataform 执行 enterprise-analytics.analytics.user_stats 表 在 enterprise-analytics Google Cloud 项目的 analytics 架构中 数据。
  9. user_stats.sqlx 表可供analytics中的最终用户使用 BigQuery 中 enterprise-analytics Google Cloud 项目中的架构。

按架构和项目将开发和生产环境拆分

此解决方案会创建两个执行环境:开发和生产。 如需按架构和 Google Cloud 项目拆分开发表和生产表,请执行以下操作: 您需要配置工作流设置、工作区编译替换 和版本配置要安排生产环境的执行,您需要 创建工作流配置。

在此解决方案中,Dataform 执行开发 在专用的 Google Cloud 开发项目中 每个工作区具有不同架构后缀的架构中。

Dataform 执行 BigQuery 中的所有生产表 无架构后缀的专用生产 Google Cloud 项目。

下表显示了将开发环境拆分为 按架构和 Google Cloud 项目查看生产表和生产表,只需进行一次开发 每个 Dataform 工作区对应的架构:

设置 开发 生产
Google Cloud 项目 enterprise-dev enterprise-prod
Git 分支 工作区名称 main
工作区编译替换 架构后缀:${workspaceName} -
版本配置 - production
工作流配置 - production

在此解决方案中,Dataform 会执行开发表和生产表 不同架构和 Google Cloud 项目中的 BigQuery。

开发者在其 Dataform 工作区中手动触发执行。 每个开发者都在自己的专用工作区中工作,这些工作区以他们的名字命名, 例如 sasha

当开发者在其工作区触发执行时 Dataform 会将工作区名称作为架构后缀附加 所有架构然后,Dataform 会执行 自定义架构中的表

例如,Dataform 从 sasha 工作区创建表 创建在 BigQuery 的 analytics_sasha 架构中。这样,每个开发者 将开发表存储在自己的架构中。不存在 意外覆盖其他开发者的表

在 Dataform 中,开发者提交更改并将其推送到自定义 (远程代码库的分支)。然后,在第三方 Git 托管平台中 会提交拉取请求批准拉取请求会合并更改 远程代码库的 main 分支。

Dataform 会自动从 main 分支构建为编译结果,具体取决于 production 版本配置设置。

Dataform 会自动执行 production 编译结果 根据 production 工作流配置中设置的时间表。

如需实现此解决方案,请配置以下 Dataform 设置:

工作流程设置

工作流设置取决于您的 Dataform Core 版本 存储在 workflow_settings.yamldataform.json 中。如需了解详情,请参阅 配置 Dataform 工作流设置

workflow_settings.yaml 中,配置以下设置:

defaultProject: enterprise-dev
defaultDataset: analytics

dataform.json 中,配置以下设置:

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-dev"
}

工作区替换项

架构后缀:"${workspaceName}"

版本配置

  • Git Commitish:"main"
  • Google Cloud 项目 ID:"enterprise-prod"

如需安排 production 编译结果的执行, 创建使用自定义时间表的工作流配置 最适合您需求的服务。

开发流程示例

在本示例中,开发者 Sasha 和 Kai 负责 同一个 Dataform 代码库。已连接 Dataform 代码库 远程第三方 Git 代码库

Sasha 在他们名为“sasha”的专属工作区工作, Kai 在他们名为“Kai”的专属工作区工作。 它们提交更改并将更改推送到远程代码库中的自定义分支; 名为 sashakai

下表显示了 Sasha、Kai、 和生产环境:

设置 萨沙 生产
Google Cloud 项目 enterprise-dev enterprise-dev enterprise-prod
Git 分支 sasha kai main
工作区编译替换 架构后缀:${workspaceName} 架构后缀:${workspaceName} -
版本配置 - - production
工作流配置 - - production

Sasha 按以下流程创建新表并将其部署到生产环境:

  1. sasha Dataform 工作区中,Sasha 创建了 user_stats.sqlx 表。
  2. sasha 工作区中,Sasha 手动触发表的执行。
  3. Dataform 执行 enterprise-dev.analytics_sasha.user_stats 表中的 enterprise-dev Google Cloud 项目中的 analytics_sasha 架构 数据。
  4. sasha 工作区中,Sasha 提交更改并将其推送到 远程 Git 代码库中的 sasha 分支。
  5. 在远程代码库中,Sasha 提交了一个拉取请求。
  6. 在远程仓库中,Kai 审核并批准了拉取请求, 将更改合并到 main 分支。
  7. Dataform 会在 按指定频率发布 production 个版本。在下一次更新 production 编译结果,Dataform 会将 enterprise-prod.analytics.user_stats 表与编译结果相关联。
  8. 在按计划执行工作流配置期间,Dataform 执行 enterprise-prod.analytics.user_stats 表 在 enterprise-prod Google Cloud 项目的 analytics 架构中 数据。
  9. user_stats.sqlx 表可供analytics中的最终用户使用 BigQuery 中 enterprise-prod Google Cloud 项目中的架构。

按架构和项目拆分开发、预演和生产环境

此解决方案会创建三种执行环境:开发、预演、 和生产环境。所有环境均按 Google Cloud 项目拆分。 此外,开发按架构从预演环境和生产环境中分离出来。

如需按架构和 Google Cloud 项目拆分开发表、预演表和生产表, 您需要配置工作流设置、工作区编译替换 和两种发布配置安排预演和生产环境 您需要创建两个单独的工作流配置。

在此解决方案中,Dataform 在 具有多个开发架构中的 BigQuery 在专用的 Google Cloud 开发项目中,每个 Dataform 工作区一个。

Dataform 执行 BigQuery 中的所有暂存表 在专用预演 Google Cloud 项目中,并位于具有相同后缀的架构中, 这表明它们是在预演阶段创建的

Dataform 执行 BigQuery 中的所有生产表 在专用生产 Google Cloud 项目中,在具有相同后缀的架构中, 这表明它们是在生产环境中创建的

下表显示了一个示例配置,将开发环境、 预演表和生产表(按架构和 Google Cloud 项目划分),只有一个 每个 Dataform 工作区对应的开发架构:

设置 开发 预演 生产
Google Cloud 项目 enterprise-dev enterprise-staging enterprise-prod
Git 分支 工作区名称 main prod
工作区编译替换 架构后缀:${workspaceName} - -
版本配置 - staging production
工作流配置 - staging production

在此解决方案中,Dataform 会执行开发、预演和 BigQuery 中不同 Google Cloud 项目中的生产表。 此外,Dataform 可在多个自定义 每个工作区一个。Dataform 执行预演和生产环境 架构中相同但位于不同 Google Cloud 项目中的表。

开发者在其 Dataform 工作区中手动触发执行。 每个开发者都在自己的专用工作区中工作,这些工作区以他们的名字命名, 例如 sasha

每个工作区都对应一个自定义 BigQuery 架构, 以工作区命名。当开发者在其工作区触发执行时 Dataform 会将工作区名称作为架构后缀附加 默认架构然后,Dataform 会执行 BigQuery 自定义架构中的表。

例如,Dataform 会执行 sasha 工作区中的表 创建在 BigQuery 的 analytics_sasha 架构中。这样,每个开发者 将开发表存储在自己的架构中。不存在 意外覆盖其他开发者的表

在 Dataform 中,开发者提交更改并将其推送到自定义 (远程代码库的分支)。然后,在第三方 Git 托管平台中 他们将拉取请求提交到 main 分支。批准拉取请求 将更改合并到远程代码库的 main 分支。

Dataform 会自动从 main 分支构建为编译结果,具体取决于 staging 版本配置设置。

Dataform 会自动执行 staging 编译结果 根据 staging 工作流配置中设置的时间表。

如需将表从预演环境提升到生产环境,请在第三方 Git 托管 开发者将拉取请求从 main 分支提交到 prod 分支。如果批准拉取请求,则更改会合并到 prod 分支 远程代码库的位置

Dataform 会自动从 prod 分支构建为编译结果,具体取决于 production 版本配置设置。

Dataform 会自动执行 production 编译结果 根据 production 工作流配置中设置的时间表。

如需实现此解决方案,请配置以下 Dataform 设置:

工作流程设置

工作流设置取决于您的 Dataform Core 版本 存储在 workflow_settings.yamldataform.json 中。如需了解详情,请参阅 配置 Dataform 工作流设置

workflow_settings.yaml 中,配置以下设置:

defaultProject: enterprise-dev
defaultDataset: analytics

dataform.json 中,配置以下设置:

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-dev"
}

工作区替换项

架构后缀:"${workspaceName}"

staging 版本配置

  • Git Commitish:"main"
  • Google Cloud 项目 ID:"enterprise-staging"

prod 版本配置

  • Git Commitish:"prod"
  • Google Cloud 项目 ID:"enterprise-prod"

如需安排 stagingproduction 编译结果的执行, 创建两个具有自定义时间表的单独工作流配置 最适合您需求的服务。

开发流程示例

在这个例子中,开发者 Sasha 和 Kai 负责 同一个 Dataform 代码库。已连接 Dataform 代码库 远程第三方 Git 代码库

Sasha 在他们名为“sasha”的专属工作区工作, Kai 在他们名为“Kai”的专属工作区工作。 它们提交更改并将更改推送到远程代码库中的自定义分支; 名为 sashakai

下表显示了 Sasha、Kai、 和生产环境:

设置 萨沙 预演 生产
Google Cloud 项目 enterprise-dev enterprise-dev enterprise-staging enterprise-prod
Git 分支 sasha kai main prod
架构 analytics_sasha analytics_kai analytics analytics

Sasha 按以下流程创建新表并将其部署到生产环境:

  1. sasha Dataform 工作区中,Sasha 创建了 user_stats.sqlx 表。
  2. sasha 工作区中,Sasha 手动触发表的执行。
  3. Dataform 执行 enterprise-dev.analytics_sasha.user_stats 表中的 enterprise-dev Google Cloud 项目中的 analytics_sasha 架构 数据。
  4. sasha 工作区中,Sasha 提交更改并将其推送到 远程 Git 代码库中的 sasha 分支。
  5. 在远程代码库中,Sasha 向 main 分支提交拉取请求。
  6. 在远程仓库中,Kai 审核并批准了拉取请求, 将更改合并到 main 分支。
  7. Dataform 会在 按指定频率发布 staging 个版本。在下一次更新 staging 编译结果,Dataform 会将 enterprise-staging.analytics.user_stats 表与编译结果相关联。
  8. 在按计划执行工作流配置期间,Dataform 执行 enterprise-staging.analytics.user_stats 表 在 enterprise-staging Google Cloud 项目的 analytics 架构中 数据。
  9. 在远程代码库中,Sasha 向 prod 分支提交拉取请求。
  10. 在远程仓库中,Kai 审核并批准了拉取请求, 将更改合并到 prod 分支。
  11. Dataform 会在 按指定频率发布 production 个版本。在下一次更新 production 编译结果,Dataform 会将 enterprise-prod.analytics.user_stats 表与编译结果相关联。
  12. 在按计划执行工作流配置期间,Dataform 执行 enterprise-prod.analytics.user_stats 表 位于 enterprise-prod Google Cloud 项目的 analytics 架构中 BigQuery。
  13. user_stats.sqlx 表可供analytics中的最终用户使用 BigQuery 中 enterprise-prod Google Cloud 项目中的架构。

后续步骤