Upgrade to Pro — share decks privately, control downloads, hide ads and more …

dbtをAirflowで動かす道のりは続く...

Yuu.Kimy
November 28, 2023

 dbtをAirflowで動かす道のりは続く...

タイミーさんとの合同勉強会で発表させて頂いた資料です。
dbt CoreをAirflow(Cloud Composer)で動かした時の検証結果をまとめています。

Yuu.Kimy

November 28, 2023
Tweet

More Decks by Yuu.Kimy

Other Decks in Technology

Transcript

  1. dbtをAirflowで動かす道のりは続く...
    分析推進室 Kimiya Yuu

    View full-size slide

  2. 本日のお話
    ● タイトルの通り、dbt(dbt Core)をAirflowで動かすことを奮闘した記録です。
    ● まだ、検証段階ですので、不正確な情報が含まれているかもしれません。
    ご了承くださいm(_ _)m

    View full-size slide

  3. 背景
    ● これまでAirflow(Cloud Composer)にて、定常的なバッチ更新で運用してきた。
    ○ 基本は、BigQueryに対するデータ更新処理
    ● ただ、日常の開発は、やり辛さが発生しており、開発体験が悪い..
    ○ ➜ dbtによる開発に切り替えたい
    ● ただし、定常運用は、既に、オペレーションとしては確立しており、
    大きくは変更したくない。
    ➜ 学習コストがかかり、キャッチアップに時間がかかるため。
    ● 上記を踏まえ、dbtをAirflowで動かてみたい!

    View full-size slide

  4. 検討
    ● 以下の方式が考えられる
    ● 折角、導入するのであれば、dbtで出来る体験をAirflowに持ち込みたい
    ➜ 上記により、#3で決定
    ➜ 個人的に使ってみたかったというのも大いにありw
    # dbt 実行概要 気になるポイント
    1 dbt Core BashOperator利用 BashOperatorに閉じてしまう..
    2 dbt Cloud DbtCloudRunJobOperator利用 dbt Cloudをまだ導入していない ..& 同上
    3 dbt Core Cosmosパッケージ利用 dbtのモデルもDAGの依存関係として表示可

    View full-size slide

  5. What’s Cosmos ??
    ● Astronomer社が提供しているOSSであり、Airflow上でdbtを動かすことが可能
    ● Airflowの画面UIで、dbtのモデルのリネージを可視化できる!
    参考: https://astronomer.github.io/astronomer-cosmos/index.html

    View full-size slide

  6. 環境
    ● 現状、利用している環境を踏まえて、以下を選択
    ● ※今、弊社で利用しているComposerで動いているAirflowのバージョンと
    Cosmosのバージョンで、Python的にはコンフリクトすることは無さそう🤗
    ○ Airflow: Cloud Composer ver. 2.1.14
    ○ Cosmos: ver.1.2.0
    ○ dbt Core: ver.1.3.7
    ○ dbt-bigquery: ver.1.3.0
    参考: https://astronomer.github.io/astronomer-cosmos/getting_started/execution-modes-local-conflicts.html

    View full-size slide

  7. 設定・実装
    ● 設定
    ○ Composer側に、PyPIからCosmosパッケージをインストールする
    ○ GCSのディレクトリ構成は以下の通り
    ● 実装
    ○ ドキュメントを参考に、DbtTaskGroup を利用して、
    dbtのモデルの実行処理を実装する

    View full-size slide

  8. ハマったこと
    ● ドキュメント通りに実装しても、エラーが発生した...
    ○ ドキュメント&コードはそれなりに読む必要がある
    ■ 例: stringで渡すと書いてあったのに、
    Pathオブジェクトで渡す必要があり.. (後述)
    ● dbt -> BigQueryの認証は、profiles.yml を渡して、ProfileConfigを生成すると、
    json keyを利用しなくてもOK
    ○ profiles.ymlには、BigQueryの実行権限を持つプロジェクトを指定
    ○ 事前に作成していないデータセットに、モデル結果を保存させると、
    データセットまで作成するので、データセット生成の権限がないとエラー..

    View full-size slide

  9. 結果
    ※補足:
    上記の結果は、裏側では、dbt run が実行されている状態。dbt testは試していないですm(_ _)m

    View full-size slide

  10. 考察
    ● 既に、dbtのモデルの運用していたとしても、Cosmosを使った事前検証は必要
    ● AirflowのDAGの中で、dbtのモデルを表現できるのは強みと思しき
    ○ dbtを利用する際は、基本的に、dbtのモデルを意識すれば良い
    ● dbtのプロジェクトをDAGごとに分離できるのも強み
    ○ 完全に分離するのであれば、Docker/k8sを検討するのが良いと思しき
    ○ ↑ただし、モデルの実行時間(全体)が長くなりそう..
    ● 小〜中規模なデータ分析基盤であれば、dbt + Cosmos + Airflowで十分かも
    ○ 今年(2023年)にリリースされ、結構ホットなOSSであるが、
    本番利用は慎重に検討したほうが良さそうな予感,,

    View full-size slide

  11. Thank you for your attention !!

    View full-size slide