「dbt + Snowflake を組み合わせてデータ変換を実装してみた」というタイトルで Classmethod Odyssey ONLINE テック企業編に登壇しました #cm_odyssey #devio2024

「dbt + Snowflake を組み合わせてデータ変換を実装してみた」というタイトルで Classmethod Odyssey ONLINE テック企業編に登壇しました #cm_odyssey #devio2024

Clock Icon2024.07.23

こんにちは!
データ事業本部 インテグレーション部 機械学習チームのよしななです。

Classmethod Odyssey ONLINE テック企業編 にて登壇いたしましたのでその資料を共有いたします。ご参加いただいた皆様、ありがとうございました!

登壇資料

スライドの概要

全体

dbt と Snowflake の概要、dbt と他の ELT サービスを比較してメリット・デメリットに感じたこと、dbt と Snowflake を接続した手順と詰まったポイントについて、本セッションでお話しました。

2024-07-23_18h49_00

メリット・デメリットについて

dbt と、私が過去にプロジェクトで使用したことのある Azure Synapse Analytics / Azure Data Factory を比較し、メリットとデメリットについてお話しました。

それぞれのサービスについて、以下の通り特徴があります。

dbt

  • ELT プロセスの T を担うことが多いサービス
    • データウェアハウスに対する処理を定義し、制御する

メリット1:jinja テンプレートの ref や macros が使用可能

jinja テンプレートの ref を使用し、他の dbt モデルを参照することが可能

2024-07-24_10h28_12

macros を使用し、マクロとして登録した SQL の処理を使いまわすことが可能
dbt プロジェクトフォルダ内のmacrosフォルダにマクロ処理を記述した .sql ファイルを配置し、dbt モデル内でマクロ処理を呼び出す jinja テンプレートを記述すると、マクロ処理が実行される

2024-07-24_10h28_44

メリット2:SQL と .yml ファイルでテストを定義し、実行することが可能

dbt モデルが生成するデータに対して、id カラムに null が含まれないでほしいという要件がある場合、以下のようにwhere id is nullで null があるか条件をつける SQL を書くことにより、null が0件ならテスト成功、null が含まれる場合はテストが失敗し、エラーを返すといった処理が可能

2024-07-24_10h29_18

.yml ファイルにテストを定義することが可能
実行したいテスト名を記述した.ymlファイルを作成し、columns:ブロックの配下でカラム名を指定
tests:ブロックで実行したいテスト名を指定し、dbt testを実行することでテストが可能

2024-07-24_10h29_39

メリット3:ドキュメント生成機能の実行

dbt docs generateでjson ファイルを出力し、dbt docs serveを実行してドキュメント表示用サーバを立ち上げることによって、ブラウザが起動しドキュメントが表示される

2024-07-24_10h30_13

Azure Synapse Analytics

  • ELT プロセスの全範囲をカバーしているサービス
    • データウェアハウスの作成~データの移動、ビックデータの分析までを担う
    • データウェアハウス構築~データ加工・変換まで一貫して行えるのがメリット

Azure Data Factory

  • ELT プロセスの LとTに対応している
    • L 部分に関して、様々なデータソースに対応している
      • Azure のデータストレージ以外にも、Amazon RDS,Amazon Redshift などの AWS サービスや Google BigQuery などに対応

https://learn.microsoft.com/ja-jp/azure/data-factory/copy-activity-overview#supported-data-stores-and-formats

メリット・デメリットのまとめ

メリットとデメリットをまとめた表は以下です。

2024-07-30_11h07_22

総じて、dbt は SQL に慣れている方なら使いやすいサービスだと思います。
SQL に対して抵抗がない方に向けて、今回は dbt と Snowflake を使用してデータ変換システムを構築していきます。

dbt + Snowflake データ変換システム構築

最後に、dbt と Snowflake を実際に構築してみた手順と、詰まったポイントについてお話しました。

以下の構成図をもとに、実際に手を動かして構築しました。

2024-07-23_18h31_16

詰まったポイントについては、以下の2点についてお話しました。

作成したリソースにはgrant all to ~を実行し、ロールの権限を付与する必要があることについて説明しました。

2024-07-23_19h14_00

dbt init 時に入力する項目のひとつである、Snowflake 識別子がどこにあるのか、コンソール上からの取得方法について説明しました。
コンソール画面左下のアカウント名部分 → Account → 現在開いているワークスペース名を選択 にカーソルを合わせると小ウィンドウが表示されます。
その中のlocatorが Snowflake 識別子になります。

2024-07-23_19h15_30

スライドの中で紹介したリンク

スライド内で紹介したリンクは以下となります。

dbt 概要:
https://classmethod.jp/partner/dbt/
Snowflake 概要:
https://www.Snowflake.com/ja/data-cloud/platform/
Azure Synapse Analytics 概要:
https://learn.microsoft.com/ja-jp/azure/synapse-analytics/overview-what-is
Azure Data Factory 概要:
https://learn.microsoft.com/ja-jp/azure/data-factory/introduction

終わりに

今回は、dbt の概要、メリットデメリットについて、dbt と Snowflake の接続手順など dbt を使用する上で基礎的な内容についてセッション内で発表させていただきました。
今後も dbt について本ブログで発信できればと思います。
改めて、Classmethod Odyssey ONLINE テック企業編 に参加してくださった皆様、本ブログを読んでくださった皆様、ありがとうございました!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.