dbtコア、Snowflake、およびGitHub Actions データエンジニアのための個人のプロジェクト
個人のデータエンジニアのための dbtコア、Snowflake、およびGitHub Actions のプロジェクト
データ/分析エンジニア向けのペットプロジェクト:dbt Core、Snowflake、Fivetran、GitHub Actionsなどのモダンデータスタックツールを探索する。
これは、データ/分析エンジニア向けのシンプルで高速なペットプロジェクトです。このプロジェクトでは、dbt Core、Snowflake、Fivetran、GitHub Actionsなどのモダンデータスタックツールを使って、Googleカレンダーからデータを抽出してSnowflakeの分析ダッシュボードに表示するまでのエンドツーエンドのデータライフサイクルを開発することができます。この記事では、プロジェクトを進めていくにあたり、洞察とヒントを共有します。GitHubリポジトリを見る
技術的な概要
プロジェクトのアーキテクチャは以下のようになっています:Googleカレンダー -> Fivetran -> Snowflake -> dbt -> Snowflakeダッシュボード。デプロイはGitHub Actionsが管理します。
Joe Reisさんの「Data Engineeringの基礎」を参考にしながら、データライフサイクルの定義されたステージに沿ってプロジェクトを見ていきましょう:
- データ生成 — Googleカレンダー、FivetranGoogleカレンダーを使っている場合、そこにはたくさんのデータが蓄積されているかもしれません。Fivetranのような「データ移動プラットフォーム」を活用することで、GoogleカレンダーをソースシステムからSnowflakeデータウェアハウスに統合するELT(抽出、読み込み、変換)プロセスを自動化することができます。現時点では、Fivetranは14日間の無料トライアルが提供されています — リンク。登録は非常に簡単です。
- ストレージ — Snowflake解析のために特化したクラウドベースのデータウェアハウスであるSnowflakeがデータのストレージソリューションとして使用されます。扱うデータのボリュームは小さいため、データパーティショニング、タイムトラベル、SnowparkなどのSnowflakeの高度な機能は使用しません。しかし、アクセスコントロール(dbtアクセスに使用されます)には特に注意を払います。企業向け版のトライアルアカウントをセットアップする必要があります。このトライアルアカウントでは、30日間の無料利用と400ドルの制限が提供されます。
- インジェスチョン — FivetranデータのインジェスチョンはFivetranとSnowflakeの両方からパートナーコネクト機能を使用して構成することができます。好みの方法を選択し、Googleカレンダーコネクタを設定します。初回の同期後、SnowflakeのUIからデータにアクセスすることができます。コネクタのウェブページにアクセスしてスキーマ図を確認できます。Fivetranの同期専用の新しいデータベースと、SQLワークロードを実行する対応するワウェーショスが作成されます。Snowflakeはストレージとコンピュートが分離されて構築されているため、コストも区別されています。ベストプラクティスとして、異なるワウェーショスを異なるワークロード(アドホック、同期、BI分析)または異なる環境(開発、本番)に使用する必要があります。
- 変革 – dbt Coreデータが Snowflake にある状態(デフォルトで6時間ごとに自動的に同期される)で、dbt Core を使用して変革のステージに移ります。dbt (data build tool) は SQL クエリのモジュール化を容易にし、SQL ワークフローの再利用とバージョン管理をソフトウェアコードと同様に管理することができます。dbt には2つの方法があります:dbt Cloud と dbt Core。dbt Cloud は有料のクラウドベースのサービスで、dbt Core は無料で使用できる機能を提供するPythonパッケージです。マシンに dbt Core をインストールし、CLIで「dbt init」コマンドを使用してプロジェクトを初期化し、Snowflake 接続を設定します。 profiles.yml ファイルの例をご覧ください。Snowflake に接続するためには、DCL(データコントロール言語)SQLコマンドをいくつか実行する必要があります。最低限の特権原則に従って、dbt用の別のユーザーを作成し、そのユーザーがデータを同期するソースデータベースと開発、本番データベースにのみアクセスできるようにします。
- ベストプラクティスの構造化アプローチに従い、データ変換のステージング、中間、マートの3つのフォルダを作成する必要があります。ここではモデルを試すことができますが、また、Google カレンダーデータの例をコピーすることもできます。リポジトリには、Google カレンダースキーマのすべてのテーブルをリストした「sources.yml」ファイルがあります。ステージングモデル(event.sql、attendee.sql、recurrence.sql)が3つ作成されており、変換モデル(utc_event.sql)とマートモデル(event_attendee_summary.sql)が1つずつ作成されています。dbtの重要な特徴であるJinjaとマクロをSQLに組み込むことで、その効果と再利用性を高めることができます。
- データの品質を確保するために、dbtで一般的なテストや単数のテストを使用してデータの期待値を設定します。「source.yml」ファイルおよび「/tests」フォルダに一部のデータ品質ルールが配置されています。 「dbt build」コマンドの実行中に、これらのデータ品質チェックがモデルのビルドと共に実行され、データの破損を防ぎます。
- dbtのスナップショット機能を使用して、変更データキャプチャとタイプ2のスローリー変更寸法を実行してください。例では、「recurrence」テーブルの変更をキャプチャしています。
- 「dbt docs generate」というコマンドを使用して、dbtドキュメンテーションを生成するのに少し時間がかかります。プロジェクトから自動的に作成されるデータの系統図とメタデータが表示されます。.ymlファイルにデータエンティティに説明を追加することで、さらに高度なドキュメンテーションを実現できます。よいドキュメンテーションは、データの可発見性とガバナンスを向上させます。
- サービング — Snowflakeダッシュボード最後に、Snowflakeダッシュボードを使用して変換されたデータを可視化します。Snowflake UIでダッシュボードを作成し、SQLクエリに基づいたタイル(プロット)を試してみましょう。
- デプロイ — GitHub Actionsdbt Cloudは簡単なデプロイオプションを提供していますが、dbt CoreプロジェクトではGitHub Actionsワークフローを使用します。GitHubのdbtリポジトリに変更がプッシュされるたびにトリガーされるワークフロー.ymlファイルを作成する必要があります。指定されたアクションを実行します。私の例のワークフローでは、開発環境に対してdbt buildを実行し、成功した場合はプロダクション環境にもdbt buildを実行します。注意:SnowflakeアカウントやパスワードなどのシークレットをGitHubのシークレットに置き換えてください。それには、リポジトリのウェブページで、Settings -> Secrets and Variables -> Actionsに移動します。「master」ブランチが更新されるたびに、ワークフローがアクションタブで開始されるのが見えるでしょう:
このプロジェクトでは、現代のデータエンジニアリングスタックのさまざまな技術について触れたに過ぎません。これは、実用的な成果だけでなく、深い探求のための優れたスタート地点です。お読みいただきありがとうございました。Happy coding!
この記事の終わりまでお読みいただいた場合は、おそらく価値のある情報だと思われ、ぜひLinkedInで私とつながってみてください。新しい機会にもオープンです!
特に明記されていない限り、すべての画像は著者によるものです。
参考文献:
[1] Reis, J. (2022). Fundamentals of Data Engineering: Plan and Build Robust Data Systems. O’Reilly Media.
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles