返回文章列表

dbt BigQuery 整合與 GitHub 版本控制

本文說明如何設定 dbt 連線 BigQuery,並整合 GitHub 進行版本控制,涵蓋 Service Account 建立、金鑰設定、dbt Cloud 專案設定,以及 Git 基本操作和最佳實務,提供程式碼範例和圖表說明,最後介紹 dbt Cloud IDE 和專案結構,提供程式碼範例與解析。

資料工程 版本控制

在資料工程領域中,dbt (data build tool) 是一款常用的轉換工具,搭配 BigQuery 等雲端資料倉儲,能有效管理和轉換資料。本文將引導您設定 dbt 與 BigQuery 的連線,並整合 GitHub 進行版本控制,確保程式碼品質和團隊協作效率。首先,需在 Google Cloud Platform 建立 BigQuery Service Account 並下載 JSON 金鑰檔案,其中包含連線所需的驗證資訊。接著,在 dbt Cloud 平台設定 BigQuery 連線,上傳 JSON 金鑰檔案並測試連線。版本控制方面,建議採用 Git 和 GitHub 管理 dbt 專案,頻繁提交程式碼、撰寫清晰的提交訊息,並遵循分支策略,確保程式碼變更的可追溯性和團隊協作的順暢。

設定 dbt 與 BigQuery 連線並整合 GitHub 版本控制

建立 BigQuery Service Account 與金鑰

要讓 dbt 連線到 BigQuery 資料平台,需要建立一個 Service Account 並下載金鑰檔案,類別似於其他資料函式庫平台的使用者名稱和密碼。

  1. 登入 BigQuery 控制檯,確認已選擇正確的專案。
  2. 進入「IAM 與管理」>「服務帳戶」,點選「建立服務帳戶」。
  3. 輸入服務帳戶名稱(例如:dbt-user),並授予「BigQuery Admin」角色。
  4. 建立完成後,點選該服務帳戶,進入「金鑰」頁籤。
  5. 點選「新增金鑰」>「建立新金鑰」,選擇 JSON 格式並下載金鑰檔案,儲存於本地端易於存取的位置,例如:dbt-analytics-engineer-keys.json

BigQuery Service Account 設定範例程式碼(JSON)

{
  "type": "service_account",
  "project_id": "your_project_id",
  "private_key_id": "your_private_key_id",
  "private_key": "your_private_key",
  "client_email": "your_client_email",
  "client_id": "your_client_id",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your_service_account_email"
}

BigQuery Service Account 設定步驟解密:

  • type: 指定帳戶型別為服務帳戶。
  • project_id: 指定 Google Cloud 專案 ID。
  • private_key_idprivate_key: 用於驗證的私鑰 ID 和私鑰內容。
  • client_email: 服務帳戶的電子郵件地址,用於 API 請求驗證。
  • JSON 金鑰檔案包含了與 BigQuery 連線所需的驗證資訊,需妥善保管,避免外洩。

在 dbt Cloud 中設定 BigQuery 連線

  1. 回到 dbt Cloud 專案設定畫面,輸入專案名稱(例如:dbt-analytics-engineer)。
  2. 在「選擇倉儲」畫面,點選 BigQuery 圖示並上傳先前下載的 JSON 金鑰檔案。
  3. 上傳完成後,點選「測試」按鈕,若出現「Your test completed successfully」訊息,表示連線成功。

GitHub 版本控制最佳實踐

GitHub 是流行的版本控制平台,用於追蹤程式碼變更和團隊協作。以下是使用 Git 的最佳實踐:

  1. 頻繁提交:即使是小變更,也應頻繁提交,以便追蹤進度和簡化除錯。
  2. 使用有意義的提交訊息:撰寫簡潔且具描述性的提交訊息,說明變更內容和原因。
  3. 遵循分支策略:使用分支進行不同功能、錯誤修復或開發任務。
  4. 提交前先提取最新變更:在推播變更前,先執行 git pull 以減少衝突。
  5. 程式碼審查:在提交前進行程式碼審查和測試,以維持程式碼品質。

常見 Git 命令與術語

術語/命令定義Git 命令(適用時)
Repository (repo)專案資料夾,包含所有檔案、歷史記錄和分支。-
Branch獨立的開發線,允許在不影響主程式碼函式庫的情況下進行新功能或修復。git branch <branch_name>
Pull Request (PR)提議的變更,用於與團隊協作和審查程式碼變更。-
Commit程式碼在特定時間點的快照,代表對檔案所做的變更集合。git commit -m "Commit message here"
Add將變更新增到暫存區,以便包含在下一次提交中。git add .git add <path/to/directory/>

Git 基本操作範例程式碼

# 建立新分支
git branch feature/new-feature

# 切換到新分支
git checkout feature/new-feature

# 將變更新增到暫存區
git add .

# 提交變更
git commit -m "Add new feature"

# 提取最新變更
git pull origin main

# 推播變更到遠端倉函式庫
git push origin feature/new-feature

Git 基本操作解密:

  • git branch:用於建立新的分支,以便進行獨立開發。
  • git checkout:用於切換到指定分支。
  • git add:將工作目錄中的變更新增到暫存區。
  • git commit:建立一個包含暫存區變更的新提交。
  • git pullgit push:分別用於從遠端倉函式庫提取最新變更和將本地變更推播到遠端倉函式庫。

使用dbt進行資料轉換的基礎與實踐

在資料分析的世界中,版本控制是確保程式碼可維護性、可擴充套件性和團隊協作的關鍵。Git和GitHub為資料分析專案提供了強大的版本控制功能,而dbt(Data Build Tool)則進一步簡化了資料轉換流程並與GitHub緊密整合。

Git基礎命令與資料分析實踐

在進行dbt專案之前,掌握基本的Git命令是至關重要的。以下是一些常用的Git命令及其在資料分析中的應用:

  • Clone: 從遠端倉函式庫克隆專案到本地,用於開始新的資料分析任務。
    git clone <repository_url>
    
  • Push: 將本地更改推播到遠端倉函式庫,與團隊成員分享最新的資料分析成果。
    git push <origin> <branch_name>
    
  • Pull: 從遠端倉函式庫更新本地專案,保持資料分析環境的同步。
    git pull
    
  • Status: 檢視當前工作目錄和暫存區的狀態,確保資料分析工作的正確性。
    git status
    
  • Log: 檢視提交歷史,追蹤資料分析專案的變更。
    git log
    
  • Diff: 比較不同版本之間的差異,審查資料分析程式碼的變更。
    git diff
    
  • Merge: 合併不同分支的變更,整合多個資料分析任務的成果。
    git checkout <target_branch>
    git merge <source_branch>
    
  • Rebase: 將一系列提交移動或合併到新的基礎提交,保持提交歷史的清晰。
    git rebase <base_branch>
    
  • Checkout: 切換分支或提交,管理不同的資料分析場景。
    git checkout <branch_name>
    

Git命令實踐解密:

這些Git命令為資料分析專案提供了基礎的版本控制功能。然而,Git的功能遠遠超出了這些基本命令。為了更好地掌握Git的使用,建議參考官方檔案,以瞭解更多高階功能和選項。

組態dbt與GitHub整合

要將dbt與GitHub整合,需要完成以下步驟:

  1. 註冊GitHub賬戶:如果尚未擁有GitHub賬戶,請先註冊。
  2. 建立新倉函式庫:在GitHub上建立一個新的倉函式庫,用於存放dbt專案的程式碼。
  3. 組態dbt與GitHub的整合:在dbt Cloud中選擇GitHub作為倉函式庫,並連線您的GitHub賬戶。
  4. 初始化dbt專案:在dbt Cloud IDE中初始化dbt專案,並將其與GitHub倉函式庫關聯。

初始化dbt專案實踐:

初始化完成後,您的dbt專案應該具備基本的目錄結構和組態檔案。您可以透過執行示例查詢來驗證dbt與資料平台(如BigQuery)的連線是否正常。

-- 示例查詢:查詢BigQuery中的公開資料集
select * from `dbt-tutorial.stripe.payment`;

dbt專案結構解密:

dbt專案的結構包括多個目錄和檔案,如modelstestssnapshots等。瞭解這些目錄和檔案的作用對於有效使用dbt至關重要。

使用dbt Cloud介面

登入dbt Cloud後,您將看到一個歡迎頁面和作業執行歷史的摘要。頂部導航欄提供了多個選項,包括:

  • Develop: 在此頁面開發您的分析程式碼、建立模型、測試和檔案。
  • Deploy: 組態作業、監控執行歷史、管理開發環境和檢查資料來源的新鮮度。

dbt Cloud介面解密:

dbt Cloud介面為資料分析團隊提供了強大的工具,用於開發、佈署和管理資料轉換任務。透過合理利用這些工具,您可以提高資料分析的效率和品質。

dbt Cloud 操作介面詳解

dbt Cloud 提供了一個直觀且功能豐富的操作介面,讓使用者能夠輕鬆管理資料轉換任務、組態自動化流程以及維護專案檔案。本文將深入介紹 dbt Cloud 的主要功能模組及其使用方法。

佈署選單功能

在 dbt Cloud 的主介面中,「佈署」選單提供了多項關鍵功能:

  1. 作業組態

    • 可檢視和管理已執行的作業,包括每個作業的呼叫記錄和狀態。
    • 能夠存取作業的執行歷史,包含執行狀態、持續時間、執行環境等詳細資訊。
    • 可檢查每個步驟的日誌記錄以及產生的成品,如模型、測試結果或檔案。
  2. 作業設定頁面

    • 提供組態 CI/CD 管道、執行測試和其他自動化行為的功能。
    • 無需手動在命令列執行 dbt 命令,即可完成各種自動化設定。

    ![](./Figure 4-19. dbt Jobs page)

  3. 環境組態

    • dbt 內建兩種主要環境:開發環境和佈署環境。
    • 開發環境在建立 dbt 專案後自動組態完成。
    • 可透過「環境」頁面檢視和管理不同的環境組態。

    ![](./Figure 4-20. dbt Environments page)

  4. 資料來源管理

    • 自動顯示最近的資料快照狀態,用於分析資料的新鮮度是否符合設定的服務水準協定(SLA)。
    • 有關資料新鮮度的詳細資訊可參考「來源新鮮度」章節。

    ![](./Figure 4-21. dbt Data Sources page)

  5. 檔案管理

    • 只要正確建立和維護 dbt 專案的檔案,就能透過「檔案」頁面檢視詳細的專案資訊。
    • 檔案能夠回答資料的含義、來源以及指標計算方式等關鍵問題。

    ![](./Figure 4-22. dbt Documentation page)

其他主要功能

  1. 專案切換

    • 右上角的選單允許使用者在不同的 dbt 專案之間快速切換。

    ![](./Figure 4-23. dbt Select Account menu)

  2. 幫助選單

    • 提供與 dbt 團隊直接溝通的管道,包括線上聊天、問題反饋以及檔案查詢。
    • 可加入 dbt 的 Slack 社群或 GitHub 討論區。

    ![](./Figure 4-24. dbt Help menu)

  3. 設定選單

    • 可組態帳戶、個人資料以及通知設定。
    • 在「帳戶設定」頁面中,可編輯和管理 dbt 專案、使用者許可權以及帳單資訊。
    • 「個人資料設定」頁面允許管理個人資訊、連結的第三方帳戶以及 API 存取金鑰。
    • 「通知設定」可組態在作業成功、失敗或取消時,透過 Slack 或電子郵件接收通知。

使用 dbt Cloud IDE

dbt Cloud IDE 是開發和分析程式碼的核心工具,包含以下主要區域:

  1. Git 控制和檔案

    • 提供 Git 操作介面,可進行提交、推播或還原程式碼變更。
    • 檔案圖示可快速存取專案的檔案頁面。

    ![](./Figure 4-29. dbt IDE—annotated)

使用 IDE 編寫程式碼範例

SELECT 
    column1,
    column2,
    COUNT(*) as total_count
FROM 
    my_table
GROUP BY 
    column1, column2

內容解密:

  1. SELECT 陳述式用於選擇要檢索的欄位。
  2. column1column2 是我們要檢索和分組的欄位。
  3. COUNT(*) 用於計算每個分組的總行數,並將結果命名為 total_count
  4. FROM my_table 指定了資料來源表名為 my_table
  5. GROUP BY column1, column2 將結果按照 column1column2 的不同組合進行分組統計。

Plantuml 圖表示範

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title dbt BigQuery 整合與 GitHub 版本控制

package "Kubernetes Cluster" {
    package "Control Plane" {
        component [API Server] as api
        component [Controller Manager] as cm
        component [Scheduler] as sched
        database [etcd] as etcd
    }

    package "Worker Nodes" {
        component [Kubelet] as kubelet
        component [Kube-proxy] as proxy
        package "Pods" {
            component [Container 1] as c1
            component [Container 2] as c2
        }
    }
}

api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2

note right of api
  核心 API 入口
  所有操作經由此處
end note

@enduml

圖表翻譯: 此圖示展示了資料處理的基本流程。首先檢查資料來源的有效性,如果資料有效,則執行 SQL 查詢並顯示結果;如果資料無效,則傳回錯誤訊息並終止處理程式。該流程清晰地表達了資料處理過程中的關鍵步驟和決策點。

dbt 專案結構與 IDE 介紹

dbt(Data Build Tool)是一個強大的資料轉換工具,主要用於資料倉儲和商業智慧分析。在本章中,我們將探討 dbt 專案的結構和其整合開發環境(IDE)的主要功能。

dbt IDE 功能概覽

dbt 的 IDE 為使用者提供了一個全面的開發環境,主要包含以下幾個部分:

  1. File Explorer(檔案瀏覽器)
    檔案瀏覽器提供了 dbt 專案的總覽,使用者可以在此檢視專案的檔案結構,包括 .sql.yml 等檔案。

  2. Text Editor(文字編輯器)
    文字編輯器是用來撰寫和分析程式碼的主要區域。使用者可以在此編輯和建立專案所需的檔案,如 SQL 和 YAML 檔案。從檔案瀏覽器中選擇的檔案將在文字編輯器中開啟,支援多檔案同時開啟。

  3. Information Window 和 Code Preview、Compile 和 Build

    • Preview(預覽):編譯並執行查詢,將結果顯示在螢幕底部的「Results」標籤中。
    • Compile(編譯):將 Jinja 程式碼轉換為純 SQL,並在「Compiled Code」標籤中顯示。
    • Build(構建):針對特設定檔案,顯示模型、測試、種子資料和快照的執行結果。
      資訊視窗還可用於除錯和檢視資料血統(Data Lineage)。
  4. Command Line(命令列)
    使用者可以在命令列中執行 dbt 指令(如 dbt rundbt test),並檢視執行結果和日誌。

dbt 專案結構

一個 dbt 專案是一個由資料夾和檔案組成的目錄,包含程式設計模式和命名慣例。所有的分析程式碼、測試、檔案和引數設定都存放在這些檔案和資料夾中。

初始專案結構範例

root/
├─ analyses/
├─ dbt_packages/
├─ logs/
├─ macros/
├─ models/
│ ├─ example/
│ │ ├─ schema.yml
│ │ ├─ my_second_dbt_model.sql
│ │ ├─ my_first_dbt_model.sql
├─ seeds/
├─ snapshots/
├─ target/
├─ tests/
├─ .gitignore
├─ dbt_project.yml
├─ README.md

各資料夾與檔案功能說明

  • analyses 資料夾:存放用於稽核目的查詢,例如在邏輯遷移過程中查詢差異。
  • dbt_packages 資料夾:安裝 dbt 套件的目錄,用於重複使用和分享程式碼。
  • logs 資料夾:預設存放專案日誌的目錄。
  • macros 資料夾:存放宏定義(類別似其他程式語言中的函式),用於重複使用 Jinja 程式碼。
  • models 資料夾:必備資料夾,存放 SQL 檔案,每個檔案代表一個模型,用於將原始資料轉換為最終的分析資料。

程式碼範例與解析

以下是一個簡單的 dbt 模型範例:

-- my_first_dbt_model.sql
SELECT 
    id,
    name,
    created_at
FROM 
    raw_data.users
WHERE 
    created_at >= '2023-01-01'

內容解密:

  1. SELECT 陳述式:選擇需要的欄位,如 idnamecreated_at
  2. FROM 子句:指定資料來源為 raw_data.users 表。
  3. WHERE 子句:過濾條件,僅選擇 created_at 大於或等於 ‘2023-01-01’ 的資料。
  4. 模型名稱:檔案名稱 my_first_dbt_model.sql 將成為資料函式庫中的表名或檢視名稱。