在系統開發中,管理開發環境至關重要。我們需要確保在開發與測試階段進行的所有操作不會影響正式環境的資料。
然而,許多團隊在系統建置初期,常常忽略這一點,因為能夠在本地方便地操作所有服務項目確實很吸引人,覺得一切先求有再求好。然而,當系統逐漸完善,團隊規模擴大後,這樣的做法便可能導致資料庫出現問題,並且在責任追溯上困難重重,出事時搞不好連誰出包了都不知道,甚至出包的人自己都搞不清楚。因此,早期便採取嚴謹的環境區隔策略能夠減少後期潛在的風險。
dbt core 提供了 profiles.yml
來作為建立與資料倉儲的 connection 的工具(文件在此),通過這個檔案,我們就能輕鬆地為開發、測試和生產環境設置不同的連接配置。
這邊先講明一個前提,我們在 BigQuery 中,有將資料倉儲設立了兩個 project,分別對應正式環境與測試環境,而我們會將正式環境的資料做隨機抽樣,將其複製至測試環境同名的資料表中。確保測試環境能夠使用與正式環境相近的數據進行測試,而不會直接操作正式的資料。(省錢 & 降低風險)
profile 中,大概會有這些 connection target:
outputs:
prod:
type: bigquery
method: service-account
project: production_project
...
keyfile: {production_service_account.json}
test:
type: bigquery
method: service-account
project: test_project
...
keyfile: {test_service_account.json}
cicd-prod:
type: bigquery
method: service-account
project: production_project
...
keyfile: {production_service_account.json}
cicd-test:
type: bigquery
method: service-account
project: test_project
...
keyfile: {test_service_account.json}
dev:
type: bigquery
method: oauth
project: test_project
...
target: dev # 預設 connection
隨後,我們就只要記得在不同環境下運行 dbt 指令時,加上不同的參數即可。
dbt build --select model1 --target cicd-test
這樣就能輕鬆的依照不同環境來執行相對應的運行啦!