Slide 1

Slide 1 text

dbtをDagster Cloudでオーケストレーションする 2024-03-05 Data Engineering Study #23 Data orchestration 特集 越境(@contraidiction29)

Slide 2

Slide 2 text

素晴らしく便利なdbt

Slide 3

Slide 3 text

dbtの実⾏管理どうしよう? せっかくならdbtの⼒をフルに活かせるものにしたい

Slide 4

Slide 4 text

dbtのオーケストレーション⽅法はいろいろ ● ⼿動 ● GitHub Actions ● Airflow ● Prefect ● Step Functions 他いろいろ... フェーズや制約事項により最適解は異なるが dbtの⼒をフルに活かしたいなら「Dagster Cloud」がオススメ → 今回はその話をしたい

Slide 5

Slide 5 text

今⽇話すこと 1. dbtをオーケストレーションする技術の選定ポイント 2. Dagster Cloudでdbtを運⽤するメリット 3. Dagsterが向いていない場合 「dbtをオーケストレーションしたいけど、そういえばDagster Cloudなんてあっ たな...」と思ってくれれば幸いです ※Dagsterに関する説明、および「オーケストレーションとは何か」に関する説明は前のLTにあるので割愛します

Slide 6

Slide 6 text

⾃⼰紹介 ● 普段のお仕事 ○ アドテク系のスタートアップ企業に所属 ○ データエンジニアなど、データに関することを⼤体 何でもやるお仕事をしています ● Snowflake‧dbt‧dagsterあたりが好き ● 「健常者エミュレータ事例集」の管理⼈ ○ ↑ググると出てくるので調べてみてね 越境 @contradiction29

Slide 7

Slide 7 text

今⽇話すこと 1. dbtをオーケストレーションする技術の選定ポイント 2. Dagster Cloudでdbtを運⽤するメリット 3. Dagsterが向いていない場合

Slide 8

Slide 8 text

dbtオーケストレーションの技術選定のポイント ● 相互運⽤性 ● Speed To Market ● Team Size and Capabilities ● 運⽤のしやすさ dbtをオーケストレーションする技術を選定するポイントは主に5つ。 データ利活⽤のフェーズや技術的制約により適切な技術選定は変わる。「ご利⽤は計画的に」 dbt特有→ ● モデルごとにオーケストレーションできること dbt特有ではない→

Slide 9

Slide 9 text

技術選定のポイント : モデル単位のオーケストレーション 初期構築段階を超えれば、モデル単位のオーケストレーションがしたくなる モデル単位のオーケストレーション ⼤雑把なオーケストレーション ● シンプルな「dbt run」しかできない ● 実装⼿順(例):GitHub Actions, EC2, ECS, Cloud Run ,.. ● ⼿軽に導⼊できるため、初期構築段階なら使い道がある ● 実⾏したいモデルを指定して「dbt run」することができる ● 実装⽅法: ○ dbt run —select model_nameを繰り返す ○ オーケストレーションツールの組み込みインテ グレーション機能を使う

Slide 10

Slide 10 text

技術選定のポイント : モデル単位のオーケストレーション dbt run - - model_nameを使わずにモデル単位でオーケストレーションする⽅法は多くない スマートに実装できるが、選べる技術は限られる dbt run - - model_nameを使わない dbt run - - model_name ● 実装 ○ AirflowのBashoperatorや類するものを使 い、モデルごとにdbt run ‒select model_nameを実⾏ ■ 参考 ● ⻑所 ○ 使い慣れているツールに直接組み込める ● 短所 ○ 実装が重くなりがち ○ 動作も重くなる ● 実装 ○ 各ツールごとに持つdbtとの統合機能を使う ○ Dagster, dbt Cloud, Cosmos(Airflow) ● ⻑所 ○ オーケストレーションツールの機能を最⼤ 限⽣かせる ○ 実装がスマート ● 短所 ○ 使うツールが限られる

Slide 11

Slide 11 text

技術選定のポイント:相互運⽤性、Speed to Market、Team Size and Capabilities、運⽤のしやすさ 観点 相互運⽤性 Speed to Market Team Size and Capabilities 運⽤のしやすさ 意味 データ基盤内部で 利⽤している他の技 術との相性 フィードバックルー プを回す速さ そのテクノロジーっ て本当に今のチー ムで扱えるの? 異常状態から正常 状態に戻すまでの スピード 観点 ‧Transformation の段階で利⽤してい るツールとの相性 ‧DWHとの相性 ‧利⽤しているクラ ウドとの相性 ‧開発フローのシ ンプルさ ‧開発者体験 ‧オーケストレー ションツールは開 発者体験に対する 影響が⼤きい ‧ツールを利⽤す るメンバーの習熟 度‧学習意欲 ‧メンバーが割く ことができる労⼒ ‧異常発⽣の検知 ⽅法 ‧異常終了した箇 所の部分復旧 ↑読んで実践するだけで防げる悲劇 がある。3/27に⽇本語版も出る! 『データエンジニアリングの基礎 ―データプロジェクトで失敗しない ために』(邦題) ※Joe Reis, Matt Housley (2022), Fundamentals of Data Engineering, Chapter 4 : Choosing Technologies Across the Data Engineering Lifecycleから抜粋したもの+運⽤のしやすさ

Slide 12

Slide 12 text

● モデルごとにオーケストレーションできること ○ Dagsterの組み込み機能で可能 ● 相互運⽤性 ○ dbtとの相性抜群 ● Speed To Market ○ 素早い開発フローの構築が可能(後述) ● Team Size and Capabilities ○ ⼀度学習すれば扱い⾃体は難しくない ● 運⽤のしやすさ ○ 運⽤負荷は低め(後述) → すべての観点でちょうどよかったのがDagster Cloudだった

Slide 13

Slide 13 text

今⽇話すこと 1. dbtをオーケストレーションする技術の選定ポイント 2. Dagster Cloudでdbtを運⽤するメリット 3. Dagsterが向いていない場合

Slide 14

Slide 14 text

Dagster Cloudでdbtを運⽤するメリット 1. サーバーレスな環境構築が可能 2. Pythonで書けるならなんでもできる柔軟さ 3. 強⼒な開発者体験←導⼊の決め⼿ 4. イケてるUI

Slide 15

Slide 15 text

サーバーレスな環境構築が可能 ● Dagsterのデプロイ⽅法は以下のオプションから選べる(※) : ○ ⾃前のインフラ ○ ハイブリッド ○ サーバーレス ● サーバーレス環境 ○ インフラの保守‧運⽤のコストを浮かせる ○ 浮いた労⼒をデータによる価値創出に向ける ○ スタートアップの⼀⼈データエンジニア体制にちょうど良い ○ そもそもサーバーレスじゃない環境でペイする組織ってどのくらいあるんだろう ● Airflowのマネージドサービスでもサーバーレス環境は提供可能 ○ AWSのManaged Service for Apache Airflow (MWAA) ○ GCPのCloud Composer、Astronomerなど ○ サーバーレスはDagster Cloud特有のメリットではない ※ https://docs.dagster.io/deployment

Slide 16

Slide 16 text

Pythonコードで書ければなんでもできる柔軟さがある ● Pythonのdef⽂の中で定義できるなら⼤体何でもで きる ○ うまく動作するのかどうか検証することが必要になる ○ 後述のブランチデプロイ機能を利⽤すれば容易な検証が可能 ○ 少ない道具で多くのユースケースに対応できる ● Dagster特有のメリットではない ○ Airflow, Prefectなどほかのツールでも実現可能 ↑dbt source freshnessを実⾏して結果をSlackに出⼒する例

Slide 17

Slide 17 text

強⼒な開発者体験:ローカル開発とブランチデプロイ環境構築 ● dagsterは開発者体験を重視する点でほかのオーケストレーション ツールとは違う ● ローカルでの開発性 ○ コードを書きながらローカルで動作検証をすることが可能 ○ ジョブの開発がやりやすい ○ Airflowでもできるがdagsterの⽅が軽い ● ブランチデプロイ機能 ○ プルリクエストを提出したら、そのPRのコードの内容を反映したクラウド環 境が作られ、テスト実⾏が可能な機能 ○ ユースケース: ■ パッケージの依存関係を検証したい ■ クラウド上の権限管理をテストしたい ■ 可能な限り本番環境に近い環境で動作確認したい ● ローカルでの開発環境とクラウド上でのテスト環境を組み合わせ れば、シンプルな開発フローを実現でき、フィードバックループ を素早く回すことが可能になる ↑実際の開発フロー

Slide 18

Slide 18 text

UIがイケてる(実物は後で⾒せます) ● モダンで⾒やすい、サクサク動くUIを提供 ○ dbtのモデルごとに、下流モデルや上流モデルをさっと閲覧できる ○ その画⾯からモデルの再実⾏が可能 ○ 変数(vars)を受け渡すことも可能 ● dbt-nativeなobservability機能も提供している ○ 処理実⾏時間がかかっているモデルなどが容易に特定可能なUI ○ 2024年3⽉時点ではExperimental Futureになっている

Slide 19

Slide 19 text

任意のモデルの上流‧下流モデルが全部⾒える

Slide 20

Slide 20 text

変数を受け取るモデルの場合、任意の期間を指定してモデルを実⾏することが可能(Backfill)

Slide 21

Slide 21 text

observability機能も提供:モデルごとに実⾏時間監視やエラーチェックもできる

Slide 22

Slide 22 text

今⽇話すこと 1. dbtをオーケストレーションする技術の選定ポイント 2. Dagster Cloudでdbtを運⽤するメリット 3. Dagsterが向いていない場合

Slide 23

Slide 23 text

Dagsterが向いていない場合 ● 組織のPython習熟度が低い場合 ○ 導⼊社数が少ないため、現段階(2024年)での導⼊はある程度チャレンジングになる ○ 実装がうまくいかない時、Pythonのライブラリを読み解いてなんとかするような場⾯が結構ある (体験談) ○ 「データ分析でPython触ってました!」くらいのPython習熟度だと厳しいかも ● 学習に時間を割けない場合 ○ Dagsterは独⾃概念のフルコースで、Airflowに慣れている⼈でも学習には⼀定時間がかかる ○ 学習の難易度が⾼いため、ある程度根を⼊れて学習する必要がある ○ 素早く価値を出したい & 組織内にDagsterの経験者がいない場合は別のツールを選んだ⽅がいいかも ○ 学習コストの⾼さは公式もわかっているようで、学習コンテンツはしっかり⽤意してある ■ Dagster University ■ ↑通しでやると⼤体わかる

Slide 24

Slide 24 text

おわりに ● Dagsterに興味が出た⽅へ ○ 初⼿はDagster Universityをやるのがお勧め ○ あるに越したことはないが、Dagsterを使いこなすのにAirflowなどの経験は必須ではない ● Dagsterをぜひ使ってほしい! ○ まだ⽇本では利⽤者数が少ない ○ ドコドコ広めたい ● Airflow以外のオーケストレーションツールの選択肢があることを知ってほしい ○ 何も考えずAirflowを⼊れる前に、選択肢の幅を広げてほしい ○ ツール⼀つ慎重に選ぶだけで避けられるペインもある