終於要到實際操作的部分了!這裡會用上一篇文章介紹的dbt-data-vault-template
的模板package和裡面AutomateDV
的實際案例。由於內容上會比較長,會按照設定與資料層分類分成幾篇文章。
這個是模板裡附帶的資料模型,基本上是簡化的Salesforce客戶源資料模型。
入門建立專案等我這裡就不介紹了,有需要的話可以參考這篇文章。這次使用的dbt模板專案是git@github.com:infinitelambda/dbt-data-vault-template.git
在跑各項初始化指令之前,可以先參考一下package的幾個在根目錄裡的重點設定檔。由於檔案比較長,這邊就只解釋跟 AutomateDV有關、非dbt預設的設定:
dbt_project.yml
vars:
...
automate_dv.hash: MD5
automate_dv.concat_string: '||'
automate_dv.null_placeholder_string: '^^'
automate_dv.hash_content_casing: 'UPPER'
這四行設定都是關於在創建散列鍵(hash key)的時候應該要用到哪一個演算法與有關的設定。講到後續整合層的時候會注重談到Data Vault 2.0 使用到的hash key和hashdiff功能,而現階段主要需要了解的是你使用的資料處理平台支不支持這些演算法和設定。在大部分情況下,預設的選項應該都沒有問題,但如果用是Redshift或者其他小眾的平台就可能需要稍作調整。詳情可以參考官方平台支持矩陣。
seeds:
+schema: SALESFORCE
這個是模板預設的原種子資料設定,這樣的schema定義會將/seeds
這個目錄裡所有的CSV檔上傳到SALESFORCE這個schema,來當作模擬資料源。
models:
...
psa:
+materialized: table
+schema: psa
這裡的psa
指的是 Persistent Staging Area,直譯的話應該是持久暫存區,而在這個資料處理模型上等於是一比一對應原資料層所有的table。
models:
...
automate_dv:
stage:
+materialized: view
+schema: automate_dv
raw_vault:
+materialized: incremental
+schema: automate_dv
加上前面的psa
,這裡可以看出來整個資料處理管道的層次:
1. seeds/SALESFORCE ->
2. psa ->
3. stage ->
4. raw_vault
從MDS的角度來看,SALESFORCE
和psa
是原始層,而stage
、raw_vault
則是對應整合層。由於這個算是一個簡單的案例,我們就不考慮實作Business Vault,但在更複雜的環境下也會在整合層上再加入更接近商務邏輯的Business Vault。
除了schema定義以外,這裡的materialized
設定是在資料庫裡物化的不同設定種類。由於各種materialized選項的不同與利弊還蠻複雜的,這裡就不深入談了。但這裡重點是較複雜的raw_vault
用的是incremental
,代表每跑一次資料處理管道只會加入當次資料刷新的新資料,相對簡單的psa
則是table
,代表是整個資料庫會被重新覆蓋掉。
packages.yml
packages:
...
- package: Datavault-UK/automate_dv
version: 0.9.6
這裡就只是通過dbt package hub來簡單安裝automate_dv
其他沒談到的設定可以參考AutomateDV官方docs和dbt官方docs。
由於是直接clone模板,所以不需要執行一般流程的dbt init
。相對的,為了初始化這個模板,需要在CLI裡依序裡執行以下兩個指令:
dbt seed
:創建與上傳剛才提到的SALESFORCE
模擬資料源。dbt deps
:下載並安裝packages.yml
裡面設定的各個package,包括這次用到的automate_dv
這樣,就完成了基本的設定與項目初始化!接下來會按照處理管道依次開始創建資料模型了。