はじめに
データパイプラインの構築において、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
のパイプライン管理を通じて一連の処理を自動化できました。