近年話題のdbtは、データエンジニアリングの分野で使われるオープンソースのコマンドラインツールです。特に、データウェアハウス内でのデータ変換(ETL:Extract, Transform, Loadの「Transform」部分)作業を効率化するために設計されていて、以下の点が特徴です。
SQLによる処理: データエンジニアやアナリストがSQLを書いてデータ変換を行う。
バージョン管理: gitなどのバージョン管理システムと連携し、データ変換のプロセスを追跡できる。
テストとドキュメンテーション: データモデルの品質を保証するためのテストを作成し、ドキュメンテーションを自動生成することができる
ワークフローの自動化: データ変換プロセスを自動化し、複雑なリレーションをを管理しやすい。
パフォーマンス最適化: データウェアハウスの性能を最適化するための機能を備えており、大規模なデータセットに対しても効率的に動作する。
コミュニティとエコシステム: 活発なコミュニティがあり、多くのプラグインや追加機能が開発されている。
今回は、そんなdbtをローカルからBigqueryに接続してみましたので、一連の流れについて書いていきます!
dbt cloudを使用することもできるのですが、開発時のテストなどはローカルから実行できたほうが何かと便利ですもんね。
事前準備
まずは、以下の事前準備を行います。
Bigqueryの事前準備
GCP側の事前準備についての詳細は割愛し、やったことの紹介のみとしますm(__)m
各種事前知識や設定に関しては、こちらを参考にしました。
- GCPのプロジェクト作成
- 任意のプロジェクト名で作成
- IAM管理画面にてサービスアカウントの作成
- 任意の名前で作成
- ロールにはBigQuery 管理者とストレージ管理者を付与する。
- 本来ストレージ管理者は不要だが、クラウドストレージの外部テーブルを使用する場合は付与する。
- 作成したサービスアカウント認証情報のダウンロード
- json形式で鍵をダウンロードする。
dbtの事前準備
次にdbtの設定です。
まずは、ローカルにdbtをインストールします。色々な方法がありますが、今回はpip
を使います。
# インストール pip install dbt-bigquery # バージョンの確認 dbt --version Core: - installed: 1.7.1 - latest: 1.7.1 - Up to date! Plugins: - bigquery: 1.7.2 - Up to date!
pip install \ dbt-core \ dbt-postgres \ dbt-redshift \ dbt-snowflake \ dbt-bigquery \ dbt-trino
インストールが終われば、プロジェクトを作成します。
dbt init
すると、プロジェクト名やGCPのプロジェクトID、認証の方法(今回は、service_accountでの認証)、認証情報ファイルのパスなどが聞かれますので、順番にこたえていきます。
すべて、こたえ終わるとホームディレクトリの配下に.dbt/profiles.yml
ができあがり、中身はこんな感じです。
<dbtプロジェクト名>: target: dev outputs: dev: dataset: <bigqueryデータセット名> job_execution_timeout_seconds: 300 job_retries: 1 keyfile: <認証情報のPATH> location: US method: service-account priority: interactive project: <GCPプロジェクトID> threads: 1 type: bigquery
できあがったプロジェクトフォルダーは以下のような構成になります。 このmodelsフォルダーに、各種モデル定義のSQLを置いていくわけですね。
├── README.md ├── analyses ├── dbt_packages ├── dbt_project.yml ├── logs │ └── dbt.log ├── macros ├── models │ └── example │ ├── my_first_dbt_model.sql │ ├── my_second_dbt_model.sql │ └── schema.yml ├── seeds ├── snapshots └── tests
実際にやってみる。
さて、それでは、事前準備ができましたので、実際に動作チェックです。以下のコマンドです。dbt init
で作成したプロジェクトには、あらかじめサンプルテーブルができるようになっているので、実行してみます。
dbt run
うまくいけば、Bigqueryのデータセットに、my_first_dbt_model
とmy_second_dbt_model
ができあがっているはずです!
まとめ
BigQueryは、単独でも強力なデータレイク、ウェアハウスとなりますが、そこにdbtを連携させることで、より管理がしやすく、モダンな分析環境となりそうですね!
※本記事は筆者が個人的に学んだこと感じたことをまとめた記事になります。所属する組織の意見・見解とは無関係です。