1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dbt+Dockerを使ってみる【インフラエンジニアへの道4日目】

Last updated at Posted at 2025-04-08

dbtを使ってみよう

今回は、Dockerを使ってdbtとPostgreSQLの環境を構築し、データパイプラインの基盤作成をやってみます。
dbtはデータエンジニアリング領域では人気のあるツールで、ETLのT(Transform)部分をシンプルに管理できるのが特徴です。dbtを使うことで、SQLベースでデータモデルの作成やテストを行い、データの品質を保ちながら効率的に処理を進めることができます。

作業環境

  • Windows11/WSLを利用
  • Docker Desktopを使用

環境構築

1. 作業用ディレクトリを用意します。

以下のような構成を目指します。

dbt_docker_tutorial/
├── docker-compose.yml
└── dbt/
    ├── profiles.yml
    └── my_dbt_project/

2. yamlファイルを作成する

  • postgresはローカル用のPostgreSQL
  • dbtは公式のdbt-postgresイメージを使います。
  • sleep infinityにしたのは後で中に入って手動でdbtコマンドを使うためです。
docker-compose.yml
version: "3.9"

services:
  postgres:
    image: postgres:13
    container_name: dbt_postgres
    environment:
      POSTGRES_USER: dbt_user
      POSTGRES_PASSWORD: dbt_pass
      POSTGRES_DB: dbt_db
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

  dbt:
    image: ghcr.io/dbt-labs/dbt-postgres:1.7.4
    container_name: dbt_runner
    depends_on:
      - postgres
    volumes:
      - ./dbt:/root/.dbt
      - ./dbt/my_dbt_project:/usr/app
    working_dir: /usr/app
    entrypoint: ["/bin/bash", "-c", "sleep infinity"]

volumes:
  pgdata:

3. コンテナを立ち上げる

PostgreSQLdbt の環境をDockerで起動します。

docker compose up -d
コマンド 意味
docker-compose docker-compose.ymlに書かれた複数のサービス(コンテナ)をまとめて操作する
up コンテナを起動する(必要なイメージを自動でダウンロードする)
-d detachedモード。(バックグラウンドで起動)コンソールにログを出さない。

起動確認します。

docker ps

無事に起動しました。
image.png

4. dbt_runnerコンテナに入ってプロジェクトを作成する

docker exec -it dbt_runner /bin/bash

dbtプロジェクトを作成する

dbt init my_dbt_project

その後、データベースの設定を求められるので、 docker-compose.ymlに記載した通りに入力していきます。
image.png
DB設定が完了したら、そのまま接続確認を行います。

dbt debug

All checks passed!と表示されれば正しく設定できています。
image.png

5.最初のモデルを作成する

modelsディレクトリ内に新しいSQLファイルを作成して最初のデータモデルを定義します。

my_first_model.sql
select * from {{ ref('staging_base') }}

このままだとテーブルがないことでエラーになるため、仮のデータを渡すように変更します。

staging_base.sql
-- 仮のデータを返すだけのモデル
select 1 as id, 'hello' as message

dbtコンテナの中に入り、実行してみます。

docker exec -it dbt_runner /bin/bash
dbt run

実行結果
image.png

  • my_first_dbt_model:dbtコンテナを作ったときにexampleディレクトリにもとから入っていたもの
  • my_second_dbt_model:↑と同じく。
  • my_first_model:今回自分で作成したもの
  • staging_base:今回自分で作成したもの

image.png
image.png

modelsディレクトリ内にあるsqlファイルが全て実行されたことが確認できました。

6.作られた内容を確認する

先程はdbt_runnerという名前のdbtのコンテナ内にいたので、exitコマンドで退出します。

# PostgreSQLコンテナに入る
docker compose exec postgres bash
# データベースにアクセスする
psql -U dbt_user -d dbt_db
\dt dbt.*
select * from dbt.staging_base;

image.png
image.png

まとめ

今回は、Dockerを使用してPostgreSQLとdbtを連携させ、データ基盤の構築をやってみました。以下の手順を通じて、必要なツールと環境の準備ができ、dbtプロジェクトの作成方法や初期設定も理解できたかと思います。

  • Docker ComposeでDBTとPostgreSQLの環境を作成
  • dbtのプロジェクトを立ち上げ、データベースとの接続確認
  • 最初のデータモデルを作成し、実行
  • 実行結果を確認し、dbtによって生成されたテーブルをPostgreSQLで確認

これで、dbtを活用したデータパイプラインの環境が整いました。
次回は、実際にdbtでデータパイプラインを作成したり、テストを行ったりしてみようと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?