概要
dbt project を簡単に検証できるように、ローカル開発環境を構築する
https://github.com/idenrai/templates/tree/main/dbt_duckdb_local
詳細
以下の順で記載
- dbt
- duckdb
- dbt project を作成して、duckdb と連携
dbt
https://docs.getdbt.com/docs/core/pip-install
基本的には以下のコマンドでインストール可能
pip install dbt-core dbt-duckdb
dbt project 作成
dbt init
でプロジェクト作成
duckdb
https://duckdb.org/#quickinstall
brew install duckdb
Create DB
以下のコマンドで DB 作成
duckdb [DB 명].db
例)
duckdb dbt_sample.db
DB 接続
duckdb dbt_sample.db
DB 動作確認
CSV ファイルを読み込み、作成したDBにテーブルを作成
ここでは 日本政府が公開する GDP データをちょっと加工したgdp_actual.csv
を利用
CREATE TABLE gdp_actual AS SELECT * FROM read_csv_auto('./gdp_actual.csv', all_varchar=True);
テーブル作成確認
duckdb に接続し、gdp_actual テーブルが作成され、データが入っていることを確認
select * from gdp_actual limit 10;
結果は以下の通り
idenrai@idenrai dbt_duckdb_local % duckdb dbt_sample.db
v1.0.0 1f98600c2c
Enter ".help" for usage hints.
D CREATE TABLE gdp_actual AS SELECT * FROM read_csv_auto('./gdp_actual.csv', all_varchar=True);
D .tables
gdp_actual
D select * from gdp_actual limit 10;
┌─────────┬─────────┬────────────────────┬──────────────────┬───┬───────────┬───────────┬────────────────┬───────────┐
│ 年 │ 期 │ 国内総生産(支出側) │ 民間最終消費支出 │ … │ 民間需要 │ 公的需要 │ 総固定資本形成 │ 最終需要 │
│ varchar │ varchar │ varchar │ varchar │ │ varchar │ varchar │ varchar │ varchar │
├─────────┼─────────┼────────────────────┼──────────────────┼───┼───────────┼───────────┼────────────────┼───────────┤
│ 1994 │ 1-3 │ 446,305.8 │ 247,535.5 │ … │ 346,475.0 │ 115,941.7 │ 139,766.4 │ 442,252.2 │
│ 1994 │ 4-6 │ 443,741.1 │ 248,757.5 │ … │ 341,604.2 │ 118,659.5 │ 141,499.7 │ 445,537.0 │
│ 1994 │ 7-9 │ 448,941.7 │ 250,618.0 │ … │ 348,123.6 │ 117,728.3 │ 142,080.7 │ 448,137.7 │
│ 1994 │ 10-12 │ 447,166.0 │ 250,779.4 │ … │ 346,878.6 │ 117,252.3 │ 141,344.4 │ 447,576.3 │
│ 1995 │ 1-3 │ 452,111.3 │ 252,929.3 │ … │ 353,607.8 │ 116,207.3 │ 140,426.2 │ 449,533.3 │
│ 1995 │ 4-6 │ 456,273.3 │ 254,883.3 │ … │ 356,441.9 │ 118,225.5 │ 144,020.0 │ 454,595.2 │
│ 1995 │ 7-9 │ 461,705.6 │ 256,355.4 │ … │ 359,669.7 │ 122,463.0 │ 147,930.6 │ 459,107.5 │
│ 1995 │ 10-12 │ 462,856.4 │ 258,170.5 │ … │ 362,306.1 │ 122,953.3 │ 150,008.8 │ 461,222.7 │
│ 1996 │ 1-3 │ 466,624.0 │ 257,416.5 │ … │ 363,095.4 │ 126,278.8 │ 153,188.6 │ 464,149.9 │
│ 1996 │ 4-6 │ 472,490.5 │ 260,509.4 │ … │ 371,480.6 │ 125,196.8 │ 156,552.1 │ 469,053.1 │
├─────────┴─────────┴────────────────────┴──────────────────┴───┴───────────┴───────────┴────────────────┴───────────┤
│ 10 rows 27 columns (8 shown) │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
dbt と duckdb を連結
profile 修正
dbt project (dbt_local_duckdb) に、上で作成した DB(dbt_sample)を連携
vi ~/.dbt/profiles.yml
該当する dbt project に以下の内容を入力
[dbt project name]:
outputs:
dev:
type: duckdb
path: [duckdb で作成した DB のパス]
target: dev
例)
dbt_duckdb:
outputs:
dev:
type: duckdb
path: /Users/idenrai/project/templates/dbt_duckdb_local/dbt_sample.db
target: dev
dbt 起動
この部分は、連携した Github のソースコードを参照するか、各自モデルを作成して実行すること
dbt run
結果
idenrai@idenrai dbt_duckdb % dbt run
09:28:27 Running with dbt=1.8.3
09:28:27 Registered adapter: duckdb=1.8.1
09:28:27 [WARNING]: Configuration paths exist in your dbt_project.yml file which do not apply to any resources.
There are 1 unused configuration paths:
- models.dbt_duckdb.example
09:28:27 Found 3 models, 9 data tests, 410 macros
09:28:27
09:28:27 Concurrency: 1 threads (target='dev')
09:28:27
09:28:27 1 of 3 START sql view model main.stg_gdp ....................................... [RUN]
09:28:27 1 of 3 OK created sql view model main.stg_gdp .................................. [OK in 0.05s]
09:28:27 2 of 3 START sql view model main.stg_gdp_year .................................. [RUN]
09:28:27 2 of 3 OK created sql view model main.stg_gdp_year ............................. [OK in 0.01s]
09:28:27 3 of 3 START sql view model main.gdp_total_info ................................ [RUN]
09:28:28 3 of 3 OK created sql view model main.gdp_total_info ........................... [OK in 0.01s]
09:28:28
09:28:28 Finished running 3 view models in 0 hours 0 minutes and 0.16 seconds (0.16s).
09:28:28
09:28:28 Completed successfully
09:28:28
09:28:28 Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
以下のようなテーブルが作成されたことを確認
D .tables
gdp_actual gdp_total_info stg_gdp stg_gdp_year
D select * from gdp_total_info;
┌─────────┬───────────────┬───────────────┬──────────────┐
│ year │ quarter_gdp │ year_sum_gdp │ year_avg_gdp │
│ varchar │ decimal(38,1) │ decimal(38,1) │ double │
├─────────┼───────────────┼───────────────┼──────────────┤
│ 1994 │ 446305.8 │ 1786154.6 │ 446538.65 │
│ 1994 │ 443741.1 │ 1786154.6 │ 446538.65 │
│ 1994 │ 448941.7 │ 1786154.6 │ 446538.65 │
│ 1994 │ 447166.0 │ 1786154.6 │ 446538.65 │
│ 1995 │ 452111.3 │ 1832946.6 │ 458236.65 │
│ 1995 │ 456273.3 │ 1832946.6 │ 458236.65 │
│ 1995 │ 461705.6 │ 1832946.6 │ 458236.65 │
│ 1995 │ 462856.4 │ 1832946.6 │ 458236.65 │
│ 1996 │ 466624.0 │ 1890717.6 │ 472679.4 │
│ 1996 │ 472490.5 │ 1890717.6 │ 472679.4 │
│ 1996 │ 473139.9 │ 1890717.6 │ 472679.4 │
│ 1996 │ 478463.2 │ 1890717.6 │ 472679.4 │
│ 1997 │ 479681.6 │ 1909896.9 │ 477474.225 │
│ 1997 │ 476013.9 │ 1909896.9 │ 477474.225 │
│ 1997 │ 477000.1 │ 1909896.9 │ 477474.225 │
│ 1997 │ 477201.3 │ 1909896.9 │ 477474.225 │
│ 1998 │ 471367.0 │ 1884729.0 │ 471182.25 │
│ 1998 │ 469284.2 │ 1884729.0 │ 471182.25 │
│ 1998 │ 470140.8 │ 1884729.0 │ 471182.25 │
│ 1998 │ 473937.0 │ 1884729.0 │ 471182.25 │
│ · │ · │ · │ · │
│ · │ · │ · │ · │
│ · │ · │ · │ · │
│ 2019 │ 557732.0 │ 2210661.6 │ 552665.4 │
│ 2019 │ 557026.8 │ 2210661.6 │ 552665.4 │
│ 2019 │ 540743.9 │ 2210661.6 │ 552665.4 │
│ 2020 │ 543793.2 │ 2107831.6 │ 526957.9 │
│ 2020 │ 500626.7 │ 2107831.6 │ 526957.9 │
│ 2020 │ 527320.3 │ 2107831.6 │ 526957.9 │
│ 2020 │ 536091.4 │ 2107831.6 │ 526957.9 │
│ 2021 │ 534340.0 │ 2143690.0 │ 535922.5 │
│ 2021 │ 536964.5 │ 2143690.0 │ 535922.5 │
│ 2021 │ 533521.7 │ 2143690.0 │ 535922.5 │
│ 2021 │ 538863.8 │ 2143690.0 │ 535922.5 │
│ 2022 │ 539164.8 │ 2188253.1 │ 547063.275 │
│ 2022 │ 545292.3 │ 2188253.1 │ 547063.275 │
│ 2022 │ 550893.0 │ 2188253.1 │ 547063.275 │
│ 2022 │ 552903.0 │ 2188253.1 │ 547063.275 │
│ 2023 │ 559270.9 │ 2241114.5 │ 560278.625 │
│ 2023 │ 564406.4 │ 2241114.5 │ 560278.625 │
│ 2023 │ 558676.3 │ 2241114.5 │ 560278.625 │
│ 2023 │ 558760.9 │ 2241114.5 │ 560278.625 │
│ 2024 │ 554727.9 │ 554727.9 │ 554727.9 │
├─────────┴───────────────┴───────────────┴──────────────┤
│ 121 rows (40 shown) 4 columns │
└────────────────────────────────────────────────────────┘