管理代码生命周期

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

如需创建 Dataform SQL 工作流的标准化生命周期以保持数据健全度并优化开发流程,我们建议您执行以下操作:

  • 创建执行环境,将开发期间创建的表与可供最终用户使用的表隔���开���。

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

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

借助这些解决方案,您可以在单个 Dataform 代码库和 Google Cloud 项目中创建执行环境。您可以选择在不同的 Google Cloud 项目中保存多个 Dataform 代码库副本,其中每个项目对应于代码生命周期的一个阶段,例如开发、预演和生产。通过这种方式,您可以在代码生命周期的每个阶段自定义 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 会根据 production 版本配置设置自动将远程仓库的 main 分支中的生产表编译为编译结果。

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

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

工作流程设置

工作流设置存储在 workflow_settings.yamldataform.json 中,具体取决于您的 Dataform Core 版本。如需了解详情,请参阅配置 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 在 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. 在 BigQuery 中的 enterprise-analytics Google Cloud 项目的 analytics 架构中,最终用户可以使用 user_stats.sqlx 表。

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

此解决方案会创建两个执行环境:开发和生产。如需按架构和 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 设置:

工作流程设置

工作流设置存储在 workflow_settings.yamldataform.json 中,具体取决于您的 Dataform Core 版本。如需了解详情,请参阅配置 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 在 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. 在 BigQuery 中的 enterprise-prod Google Cloud 项目的 analytics 架构中,最终用户可以使用 user_stats.sqlx 表。

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

此解决方案会创建三种执行环境:开发、预演和生产环境。所有环境均按 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 设置:

工作流程设置

工作流设置存储在 workflow_settings.yamldataform.json 中,具体取决于您的 Dataform Core 版本。如需了解详情,请参阅配置 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 在 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. 在 BigQuery 中的 enterprise-prod Google Cloud 项目的 analytics 架构中,最终用户可以使用 user_stats.sqlx 表。

后续步骤