管理代码生命周期

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

为了创建标准化的数据形式 SQL 工作流生命周期,以维护数据卫生并优化开发流程,我们建议您:

  • 创建执行环境,以将开发期间创建的表与面向最终用户的表隔离。

  • 配置版本和工作流配置,以便在生产环境(以及可选的预演环境)中执行工作流。

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

借助这些解决方案,您可以在单个 Dataform 代码库和 Google Cloud 项目中创建执行环境。您可以选择在不同的 Google Cloud 项目中存放 Dataform 代码库的多个副本,每个项目对应于代码生命周期的某个阶段,例如开发、预演和生产。通过这种方法,您可以在代码生命周期的每个阶段自定义 Identity and Access Management 权限

隔离执行环境的最佳实践

我们建议您将在 BigQuery 中执行开发 SQL 工作流期间创建的表与生产表隔离。这样可确保最终用户可以导航到生产表,并消除最终用户意外访问错误数据的风险。

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

按架构拆分开发环境表和生产环境表
适合小型团队。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 会根据 production 版本配置设置,自动将远程代码库的 main 分支中的生产表编译为编译结果。

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

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

工作流设置

根据您的 Dataform 核心版本,工作流设置存储在 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 和生产环境应用的环境设置:

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

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

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

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

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

下表显示了按架构和 Google Cloud 项目拆分开发表和生产表的配置,每个 Dataform 工作区有一个开发架构:

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

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

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

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

例如,Dataform 会在 BigQuery 的 analytics_sasha 架构中通过 sasha 工作区创建表。这样,每位开发者都可以将其开发表存储在自己的架构中。不会有意外覆盖其他开发者表的风险。

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

Dataform 会根据 production 版本配置设置,自动将远程代码库的 main 分支中的生产表编译为编译结果。

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

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

工作流设置

根据您的 Dataform 核心版本,工作流设置存储在 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 和生产环境应用的环境设置:

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

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

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

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

在此解决方案中,Dataform 会在专用开发 Google Cloud 项目中的多个开发架构(每个 Dataform 工作区一个)中执行 BigQuery 中的开发表。

Dataform 会在专用的暂存 Google Cloud 项目中执行 BigQuery 中的所有暂存表,并使用具有相同后缀的架构,以标记它们是在暂存阶段创建的。

Dataform 会在专用的生产 Google Cloud 项目中执行 BigQuery 中的所有生产表,并使用具有相同后缀的架构,以标记它们是在生产环境中创建的。

下表显示了一个示例配置,该配置会按架构和 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 会在 BigQuery 的 analytics_sasha 架构中执行 sasha 工作区中的表。这样,每位开发者都可以在自己的架构中存储其开发表。不会有意外覆盖其他开发者表的风险。

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

Dataform 会根据 staging 版本配置设置,自动将远程代码库的 main 分支中的暂存表编译为编译结果。

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

如需将表从预演环境提升到生产环境,开发者需要在第三方 Git 托管平台中,将 main 分支中的拉取请求提交到 prod 分支。拉取请求获得批准后,系统会将更改合并到远程代码库的 prod 分支。

Dataform 会根据 production 版本配置设置,自动将远程代码库的 prod 分支中的生产表编译为编译结果。

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

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

工作流设置

根据您的 Dataform 核心版本,工作流设置存储在 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 和生产环境应用的环境设置:

设置 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 表。
  2. sasha 工作区中,Sasha 手动触发表的执行。
  3. Dataform 会在 BigQuery 的 enterprise-dev Google Cloud 项目中执行 analytics_sasha 架构中的 enterprise-dev.analytics_sasha.user_stats 表。
  4. sasha 工作区中,Sasha 提交更改并将其推送到远程 Git 代码库中的 sasha 分支。
  5. 在远程仓库中,Sasha 向 main 分支提交拉取请求。
  6. 在远程代码库中,Kai 审核并批准拉取请求,将更改合并到 main 分支。
  7. Dataform 会按照指定的频率自动更新 staging 版本中的编译结果。在下次更新 staging 编译结果时,Dataform 会将 enterprise-staging.analytics.user_stats 表添加到编译结果中。
  8. 在按计划执行工作流配置期间,Dataform 会在 BigQuery 中执行 enterprise-staging Google Cloud 项目的 analytics 架构中的 enterprise-staging.analytics.user_stats 表。
  9. 在远程仓库中,Sasha 向 prod 分支提交拉取请求。
  10. 在远程代码库中,Kai 审核并批准拉取请求,将更改合并到 prod 分支。
  11. Dataform 会按照指定的频率自动更新 production 版本中的编译结果。在下次更新 production 编译结果时,Dataform 会将 enterprise-prod.analytics.user_stats 表添加到编译结果中。
  12. 在按计划执行工作流配置期间,Dataform 会在 BigQuery 的 enterprise-prod Google Cloud 项目中执行 analytics 架构中的 enterprise-prod.analytics.user_stats 表。
  13. user_stats 表可供 BigQuery 中 enterprise-prod Google Cloud 项目的 analytics 架构中的最终用户使用。

后续步骤