工作流程生命週期的最佳做法

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

如要建立標準化的 Dataform 工作流程生命週期,維持資料健全度並提升開發流程效率,建議您採取下列做法:

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

  • 設定發布和工作流程設定,在正式環境 (以及選用的預先發布環境) 中執行工作流程。

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

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

獨立執行環境的最佳做法

建議您將開發工作流程執行期間建立的資料表,與 BigQuery 中的正式版資料表隔離。確保使用者可以前往正式版資料表,並避免使用者不慎存取錯誤資料。

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

依結構定義分割開發和正式版資料表
適合小型團隊。Dataform 會在 BigQuery 中,以不同的結構定義建立開發和正式版資料表。Dataform 會在具有相同尾碼的結構定義中,執行所有開發資料表,標示這些資料表是在開發期間建立。開發人員可以覆寫彼此的開發表格。
依結構定義和 Google Cloud 專案分割開發和正式環境資料表
建議用於中型團隊。Dataform 會在 BigQuery 的不同結構定義和專案中,建立開發和正式版資料表。Dataform 在專屬開發 Google Cloud 專案中發布了所有開發資料表。每位 Dataform 開發人員都有自己的專屬結構定義,可供開發表格使用。這個解決方案可避免開發人員不小心覆寫彼此的開發資料表。這個方法的缺點是,刪除開發資料表和結構定義,以及在每個環境中重新建立所有資料表,可能需要更多時間。
依 Google Cloud 專案分割開發、測試及實際工作環境資料表
建議大型團隊或需要預先發布環境的團隊使用。 Dataform 會在 BigQuery 的專屬Google Cloud 專案中,執行各環境的資料表。這項解決方案可讓您充分掌控程式碼生命週期。

所有解決方案都需要連線至單一第三方遠端存放區的單一 Dataform 存放區。

在所有解決方案中,開發人員都手動觸發 Dataform 工作區內開發表格的執行作業。Dataform 會在版本設定中自動編譯正式版和暫存表,並以工作流程設定中設定的頻率執行這些資料表。

依結構定義分割開發和正式版

本解決方案會建立兩個執行環境,Dataform 將在其中執行工作流程:開發和生產環境。如要依結構定義分割開發和正式版資料表,您需要設定工作流程設定、工作區編譯覆寫和版本設定。如要排定正式環境的執行作業,請建立工作流程設定。

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 Core 版本而定,工作流程設定會儲存在 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. 在 Dataform 工作區中,Sasha 建立 user_stats 資料表。
  2. 在工作區中,Sasha 手動觸發表格執行作業。
  3. Dataform 會在 BigQuery 的 enterprise-analytics Google Cloud 專案中,於 enterprise-analytics.analytics_dev.user_stats結構定義中建立 analytics_dev 資料表。
  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 Core 版本而定,工作流程設定會儲存在 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 專案中,執行 enterprise-dev.analytics_sasha.user_stats 結構定義中的資料表。analytics_sasha
  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 會在 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 會在 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 Core 版本而定,工作流程設定會儲存在 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 專案中,執行 enterprise-dev.analytics_sasha.user_stats 結構定義中的資料表。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 會在 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 架構的終端使用者使用。

後續步驟