管理程式碼生命週期

本文將說明在 Dataform 中管理程式碼生命週期的最佳做法:建立開發、測試和正式環境,以及為每個環境設定編譯和執行設定。

如要建立 Dataform SQL 工作流程的標準化生命週期,以維持資料衛生並改善開發程序,建議您:

  • 建立執行環境,將開發期間建立的資料表與可供使用者使用的資料表區隔開來。

  • 設定版本和工作流程設定,以便在正式環境中執行工作流程,並視需要在測試環境中執行。

本文說明如何使用工作區編譯覆寫功能隔離開發資料表,以及如何設定測試和正式環境的發布版本設定工作流程設定

這些解決方案可讓您在單一 Dataform 存放區和 Google Cloud 專案中建立執行環境。您可以選擇將 Dataform 存放區複製多份,並存放在不同的Google Cloud 專案中,每個專案對應至程式碼生命週期的階段,例如開發、測試和正式發布。這種做法可讓您在程式碼生命週期的每個階段自訂 Identity and Access Management 權限

隔離執行環境的最佳做法

建議您在 BigQuery 中,將開發 SQL 工作流程執行期間建立的資料表與正式版資料表分開。這可確保使用者可以前往正式版資料表,並消除使用者誤觸錯誤資料的風險。

您可以透過下列方式建立隔離的執行環境:

依據結構定義將開發和實際工作環境的資料表分開
建議用於小型團隊。Dataform 會在 BigQuery 中以不同的結構定義建立開發和正式版資料表。Dataform 會執行結構定義中所有具有相同後置字元的開發表格,以標示這些表格是在開發期間建立的。開發人員可以覆寫彼此的開發資料表。
依據結構定義和 Google Cloud 專案將開發和正式環境的資料表分開
建議用於中型團隊。Dataform 會在 BigQuery 的不同結構定義和專案中建立開發和正式版資料表。Dataform 在專屬的開發 Google Cloud 專案中發布所有開發資料表。每位資料表單開發人員都有專屬的開發資料表結構定義。這個解決方案可避免開發人員不小心覆寫彼此的開發資料表。這個方法的缺點是,刪除開發資料表和結構定義,以及在每個環境中重新建立所有資料表可能需要花費更多時間。
將開發、測試及實際工作環境資料表依專案分開 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 修訂版本:"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. Sasha 在 Dataform 工作區中建立 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 會在 BigQuery 專用正式版 Google Cloud 專案中執行所有正式版資料表,且不含結構定義後置字串。

下表顯示的設定會依據結構定義和 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 修訂版本:"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 專案中,在 BigQuery 的多個開發結構定義中執行開發資料表,每個 Dataform 工作區一個。

Dataform 會在具有相同後置詞的結構定義中,在專屬的暫存 Google Cloud 專案中執行 BigQuery 中的所有暫存資料表,以標示這些資料表是在暫存階段建立的。

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 會在 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 修訂版本:"main"
  • Google Cloud 專案 ID:"enterprise-staging"

prod 版本設定

  • Git 修訂版本:"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 結構定義中的使用者使用。

後續步驟