はじめに
データパイプラインの構築において、Snowflake、dbt、Dagsterを組み合わせることで、効率的なワークフローを実現できます。本記事では、jaffle_shopというサンプルプロジェクトを使用して、dbtのセットアップからDagsterを使ったオーケストレーションのプロセスまでを簡単に解説します。dbt環境は既にDocker上に立ち上げられている前提です。
ステップ1:jaffle_shopプロジェクトをクローン
まず、サンプルプロジェクトjaffle_shopをクローンします。
jaffle_shopのリポジトリ
git clone https://github.com/dbt-labs/jaffle_shop.git
cd jaffle_shop
このプロジェクトには、dbtを使用した基本的なデータモデルが含まれています。本来のプロジェクトでは実際にSQLなどを記述してデータ変換を定義しますが、今回はすでに記述済みのもので実行します。
ステップ2:Snowflakeへの接続
プロジェクトをクローンしたら、次に接続設定を確認します。ルートの.dbt配下のprofile.ymlに接続情報を入れるとdbt側が情報を認識してくれます。
jaffle_shop:
outputs:
dev:
account: 'アカウント情報'
database: '使用するデータベース'
password: 'パスワード'
role: '使用するロール'
schema: '使用するスキーマ'
threads: 1 # 同時実行するスレッド数
type: snowflake
user: 'Snowflakeユーザー'
warehouse: '使用するウェアハウス'
target: dev
dbt環境が正しく設定されているかを確認するために、次のコマンドを実行します。
dbt debug
dbt debugにより、Snowflakeとの接続が正しく確立されているかが確認できます。すべてのテストがパスすれば、dbtプロジェクトは正常に動作していることが確認できます。
ステップ3:Dagsterプロジェクトの作成
次に、jaffle_shopプロジェクト内でDagsterプロジェクトを設定し、データパイプラインのオーケストレーションを行います。
まず、dbtのプロジェクトディレクトリに移動し、Dagsterプロジェクトを作成します。
cd jaffle_shop
dagster-dbt project scaffold --project-name dbt_dagster
このコマンドにより、Dagsterの構成とdbtの設定が組み合わされ、dbtモデルを実行するためのDagsterプロジェクトが作成されます。

ステップ4:Dagsterでの実行
次に、Dagsterを開発モードで起動し、Webインターフェースを通じてパイプラインを管理・実行します。
作成したDagsterプロジェクトディレクトリdbt_dagsterに移動します。
cd dbt_dagster
まず、DAGSTER_DBT_PARSE_PROJECT_ON_LOADという環境変数を設定します。これにより、Dagsterがdbtプロジェクトをロード時に解析します。
export DAGSTER_DBT_PARSE_PROJECT_ON_LOAD=1
次に、Dagsterを開発モードで起動します。
dagster dev
ブラウザでlocalhost:3000にアクセスすると、DagsterのUIが開きます。UI上でMaterialize allボタンをクリックすることで、すべてのdbtモデルをビルドしてマテリアライズします。これによりseedに入っているcsvがsnowflakeへロードされ、modelsで記述された実行順序に基づいてデータの変換及びテーブル作成が行われます。

マテリアライズが全て成功すると✅がつきます。
Snowflake側でも、テーブルが作られていることが確認できます。

まとめ
この手順により、Snowflake、dbt、Dagsterを組み合わせて、データパイプラインのオーケストレーションを素早く試すことができました。jaffle_shopプロジェクトを利用することで、シンプルかつ実用的なデータモデルの操作を行い、Dagsterのパイプライン管理を通じて一連の処理を自動化できました。

