在專案中,我們通常會使用虛擬環境確保每個專案不會互相影響。
以下是在本地創建一個虛擬環境的步驟:
mkdir my_dbt_project
cd my_dbt_project
dbt-env
python3 -m venv dbt-env
dbt-env
source dbt-env/bin/activate
python3 -m pip install dbt-core
如果安裝過程中遇到錯誤,通常是因為 pip 版本過舊。你可以嘗試升級 pip 再重新安裝:
python3 -m pip install --upgrade pip
升級 pip 後,再次嘗試安裝 dbt-core。這樣可以確保安裝的是與你系統相容的最新版本。
安裝完成後,輸入以下指令檢查 dbt 是否安裝成功:
dbt --version
應該會看到 dbt 的版本資訊,代表已經正確安裝
完成 dbt 的安裝後,我們可以透過以下指令來初始化 dbt 專案:
dbt init dbt_demo
這個指令會創建一個名為 dbt_demo 的資料夾,裡面包含了基礎的專案結構。
其中有幾個重要的檔案需要特別說明一下:dbt_project.yml
和 profiles.yml
dbt_project.yml
dbt_project.yml 是 dbt 專案的主要設定,從專案名稱、資料庫、資料模型位置等等。
name: 'dbt_demo'
version: '1.0'
config-version: 2
profile: 'dbt_demo_profile'
target-path: "target/"
clean-targets:
- "target"
- "dbt_modules"
model-paths: ["models"]
snapshot-paths: ["snapshots"]
analysis-paths: ["analyses"]
test-paths: ["tests"]
seed-paths: ["seeds"]
profiles.yml
用來定義資料庫連接的相關配置。通常放在根目錄下 ~/.dbt/profiles.yml
profiles.yml
範例dbt_demo_profile:
target: dev
outputs:
dev:
type: postgres
host: localhost
user: my_username
password: my_password
dbname: my_database
schema: public
threads: 4
port: 5432
profiles.yml
設定多個環境dbt_demo_profile:
target: dev
outputs:
dev:
...
prod:
...
這樣的設定方便我們切換到生產環境,只需要在 dbt_project.yml 中將 profile 的 target 改為 prod,即可快速切換到另一個環境,或是針對不同環境執行不同的測試。
執行完 dbt init
後,models/
資料夾會有範例 sql
,專案結構如下:
models/
├── example/
| ├── schema.yml
| └── my_first_dbt_model.sql
my_first_dbt_model.sql
{{ config(materialized='table') }}
with source_data as (
select 1 as id
union all
select null as id
)
select *
from source_data
where id is not null
{{ config(materialized='table') }}
: 指定模型的 materialization
為 table
,也可以設定為 view
dbt 較新的版本,可以使用
materialize_view
了
schema.yml
schema.yml 文件用來定義 model 的結構、欄位的描述、以及數據品質測試。
version: 2
models:
- name: my_first_dbt_model
description: "A starter dbt model"
columns:
- name: id
description: "The primary key for this table"
data_tests:
- unique
- not_null
- name: my_second_dbt_model
description: "A starter dbt model"
columns:
- name: id
description: "The primary key for this table"
data_tests:
- unique
- not_null
version: 2
:這是 schema.yml 的格式版本號,version: 2 是目前 dbt 使用的格式。models
:定義模型清單。在這裡定義了兩個模型:my_first_dbt_model
和 my_second_dbt_model
。models > name
:這個 model 名稱必須與專案中 SQL 檔案的名稱一致,每個 model 都有一個 description
欄位,用來描述這個 model 的用途和內容。columns
:columns 就是 model 中的欄位,這裡定義了 id 欄位,並提供了描述與測試的內容。columns > name
:這是欄位的名稱,也有description
來描述欄位是資料表的主鍵,在使用 model 時可以更清楚。columns > data_tests
: test 部分會定義該欄位的自動化測試,常見的有 unique
檢查欄位中是否唯一,not_null
檢查欄位中的值是否有空值 null。
data_tests
也是新版才用的名稱,以前是tests
今天就先這樣吧~明天會直接開始帶 Jaffle Shop,應該會直接用 docker 來安裝,會直接提供官方的 repo ,也會直接在本地開一個 db 來測試