OLAP (OnLine Analytical Processing) の用途に特化した組み込みの RDBMS に DuckDB がある。 そして、dbt には DuckDB 向けのアダプタがあるので、バックエンドのデータベースとして利用できる。 これは、ローカルのマシンでデータ分析をしたり、dbt の機能を試す際に有益と考えられる。 そこで、今回は環境をセットアップする流れをメモ的に書いておく。
使った環境は次のとおり。
$ sw_vers ProductName: macOS ProductVersion: 14.3.1 BuildVersion: 23D60 $ python -V Python 3.11.7 $ dbt -v Core: - installed: 1.7.8 - latest: 1.7.8 - Up to date! Plugins: - duckdb: 1.7.2 - Up to date!
もくじ
下準備
まずは DuckDB 向けの dbt アダプタである dbt-duckdb をインストールしておく。 dbt の本体である dbt Core も依存関係として一緒に入る。
$ pip install dbt-duckdb
あとは DuckDB の CLI をインストールしておく。
$ brew install duckdb
プロジェクトをセットアップする
基本的には dbt init
を使うことで、対話的にプロジェクトのひな形を作れる。
$ dbt init
ただし、手っ取り早くセットアップしたいときは、以下のように設定ファイルを直接作っても良い。
まず必要なのはプロジェクトの情報を記述した dbt_project.yml
という YAML ファイル。
$ cat << 'EOF' > dbt_project.yml config-version: 2 name: 'dbt_duckdb_example' version: '1.0.0' profile: 'dbt_duckdb_example' EOF
次に、データベースに接続するためのプロファイルの設定ファイルを用意する。
デフォルトでは $HOME/.dbt/profiles.yml
の内容が使われる。
以下では dbt_duckdb_example
という名前のプロファイルを定義している。
プロファイルの名前は先ほどの dbt_project.yml
で記述した profile
と揃える必要がある。
なお、以下のコマンドは既に dbt を使っていてプロファイルの設定ファイルがある場合には上書きされてしまう点に注意すること。
$ mkdir -p ~/.dbt $ cat << 'EOF' > ~/.dbt/profiles.yml config: send_anonymous_usage_stats: False dbt_duckdb_example: outputs: dev: type: duckdb path: dev.duckdb target: dev EOF
上記で dbt_duckdb_example.outputs.dev
は dev
というターゲット (環境)の設定をしている。
ターゲットは開発用、ステージング用、本番用などで複数作れる。
そして dbt_duckdb_example.outputs.dev.type
に duckdb
を指定することで、データベースへ接続する際のアダプタとして dbt-duckdb が使用される。
dbt_duckdb_example.outputs.dev.path
は dbt-duckdb アダプタ固有の設定でデータベースのファイルパスを表す。
dbt_duckdb_example.target
はデフォルトで実行するターゲットを指定している。
以上で必要な設定ファイルができた。 続いては dbt debug コマンドを実行してみよう。 このコマンドはデータベースへの接続を確認するためのもの。
$ dbt debug 10:46:05 Running with dbt=1.7.8 10:46:05 dbt version: 1.7.8 10:46:05 python version: 3.11.7 ... 10:46:05 Connection: 10:46:05 database: dev 10:46:05 schema: main 10:46:05 path: dev.duckdb 10:46:05 config_options: None 10:46:05 extensions: None 10:46:05 settings: None 10:46:05 external_root: . 10:46:05 use_credential_provider: None 10:46:05 attach: None 10:46:05 filesystems: None 10:46:05 remote: None 10:46:05 plugins: None 10:46:05 disable_transactions: False 10:46:05 Registered adapter: duckdb=1.7.2 10:46:05 Connection test: [OK connection ok] 10:46:05 All checks passed!
問題なくデータベースに接続できればコマンドが正常終了する。
任意の場所にあるプロファイルの設定ファイルを使いたい場合
なお、$HOME/.dbt
以外の場所にあるプロファイルの設定ファイルを使用することもできる。
その場合は dbt コマンドに --profiles-dir
オプションを指定すれば良い。
$ cat << 'EOF' > profiles.yml config: send_anonymous_usage_stats: False dbt_duckdb_exaple: outputs: dev: type: duckdb path: dev.duckdb target: dev EOF $ dbt debug --profiles-dir .
データベースの内容を確認する
dbt debug コマンドを実行すると、ひとまずデータベースのファイルができる。
このときファイル名は、先ほどプロファイルで指定した path
に対応する。
$ ls -1 dbt_project.yml dev.duckdb logs profiles.yml
DuckDB の CLI を使って接続してみよう。 中身は空っぽではあるものの、ちゃんと利用できることが確認できる。
$ duckdb dev.duckdb v0.10.0 20b1486d11 Enter ".help" for usage hints. D
いじょう。