💬

trocco®のワークフローでdbtジョブを動かしてみた

2023/05/25に公開

クラウドエースData/MLディビジョン所属のおでんです。

今回は、データ分析基盤構築・運用の支援 SaaS である trocco® のdbt連携機能を使用して、 trocco® のワークフローとdbtジョブを連携してみたので、手順と感想をまとめました。

trocco®とは

trocco®は、ELT/データ転送・データマート生成・ジョブ管理・データガバナンスなどの
データエンジニアリング領域をカバーした、分析基盤構築・運用の支援SaaSです。

今回は、dbt連携機能を使用して、 trocco® のワークフローとdbtジョブを連携してみます。

https://trocco.io/lp/index.html

dbtとは

dbtは、SQLだけでデータ変換を行い、依存関係を考慮したテーブルやビューを作成してくれるデータモデリングに使用するツールです。

ELT(Extract、Load、Transform)にあてはめると、 T を担当するツールで、データがDWH に存在する状況で使います。

データ変換・テーブルやビューの作成だけなら、SQL単体でも可能ですが、dbtを使うことで以下のようなメリットがあります。

  • 複数のSQL同士の依存関係が考慮されるため、SQLを組み合わせたデータパイプライン(dbtの世界ではモデルと呼ぶ)を容易に作成可能
  • テーブルスキーマやデータリネージ(どの経路で取得したデータなのか)を含むドキュメントを自動生成可能
  • ユニーク値・NULL値の有無などのデータに対するテストを実行可能

現在dbtは、OSSとして公開されているdbt coreと、SaaSとして使える有償版のdbt cloudの2つがあります。

https://blog.trocco.io/glosarry/dbt

trocco®とdbtを連携するメリット

trocco®とdbtを連携するメリットは、お互いの苦手な部分を補完できる点です。

それぞれの苦手な部分を整理します。

dbtの苦手な部分

dbtは、ELTのTのみを担当するため、BigQueryなどのDWH内でのデータを対象とします。
そのため、外部データソースからデータをとってきて、使いやすく加工して、データユーザーまで届けるというエンドツーエンドのデータパイプラインを構築することができません。

また、dbt は毎日PM10:00に実行するような定期実行ができません(SaaSのdbt cloudでは可能)。

trocco®の苦手な部分

trocco®は、dbt連携機能以外にデータマート機能というSQLによるデータパイプラインを作る機能がありますが、dbtでサポートしているような複雑なモデル作成・テストなどはサポートしていません。

データマートは、特定の用途向けに切り出されたテーブルであり、データ活用を盛んに行う企業であれば100テーブル以上になることも想定されます。

GUIで作成可能なtrocco®といえど、多くのデータマート作成ジョブを個別に定義し、ワークフロー化するのは大変です。

お互いの苦手な部分を補完

trocco®を使うことで、dbtではできない外部データソースとの連携部分と定期実行を補完し、エンドツーエンドのデータパイプラインを構築することが可能です。

また、dbtを使うことで、trocco®では個別に定義するしかないデータマート作成ジョブを、まとめることができ、データマート作成で発生しがちなクエリの増加・複雑化といった問題に対処することが可能です。

trocco®のワークフローでdbtジョブを動かしてみた

では、実際にtrocco®のワークフローからdbtを動かしてみます。

作成するワークフローは、「csv-load」というデータ転送ジョブと、「dbt-sample-job」というdbtジョブのシンプルな構成です。

「csv-load」というデータ転送ジョブでは、外部データソースのCloud Storageから、BigQueryにCSVファイルをロードします。

「dbt-sample-job」というdbtジョブでは、BigQueryテーブルのデータを加工して、別のテーブルに書き出します。
trocco1

事前準備

事前準備として、ワークフローを構成する2つのジョブを作成します。

今回の記事のメインは、dbtとの連携であるため、「csv-load」というデータ転送ジョブの作成方法は省略し、dbtジョブの作成方法のみを解説します。

dbt Gitリポジトリの登録

まずは、dbt Gitリポジトリと接続します。
trocco®は、Gitリポジトリ上のdbtのファイルを読み取り、ジョブを実行します。

dbt Gitリポジトリから「新規追加」を押します。
trocco2

任意の名前を入力します。

アダプターには、BigQueryを選択します。

リポジトリURLには、Git SSH形式のURLを入力します。
ブランチ名を入力し、保存します。

trocco3

保存するとDeploy Keyが作成されるので、Gitリポジトリに登録します。

Deploy Keyは、GithubなどのGitリポジトリーサーバーへのアクセスに用いられるSSH公開鍵のことです。

trocco4

Githubリポジトリの「Settings」>「Deploy Kesy」から「Add deploy key」を選択し、deploy keyを登録します。

trocco5

これで、dbt Gitリポジトリの登録は完了です。

dbt ジョブ設定

次に、dbt ジョブ設定をします。
dbt ジョブ設定から「新規追加」を押します。

trocco6

任意の名前を入力し、作成したGitリポジトリを選択します。

trocco7

実行コマンドに、「dbt run」を選択します。
dbt runは、SQLファイルをもとに、テーブルを作成してくれるコマンドです。

Google BigQuery接続情報は、 BigQueryの接続情報を参考に作成しておきます(今回のメインはdbtであるため省略)。

データセットに、テーブルを作成するデータセット名を入力します。
ロケーションには、データセットの存在するロケーションを選択します。

trocco8

これで、事前準備は完了です。

ワークフローの作成

では、ワークフローを作成していきましょう。
ワークフローから「新規ワークフロー作成」を押します。

trocco9

任意のワークフロー名とジョブ実行設定を選択し、保存します。
ジョブ実行設定の詳細はこちら

trocco10

ワークフローを編集していきます。

trocco転送ジョブから、「csv-load」というデータ転送ジョブを追加します。
trocco dbtジョブから、「dbt-sample-job」というdbtジョブを追加し、それぞれ繋げて、保存すれば完成です。

trocco11

trocco®から、dbtジョブを実行してみる

では、dbtジョブを含むワークフローを実行してみます。

ワークフローの「実行」から、作成したワークフローを実行します。

trocco12

成功しました。

trocco13

BigQueryを確認すると、dbt GitリポジトリのSQLファイルをもとに、2つのテーブルが作成されています。

trocco14

以上のように、trocco®とdbtの連携を容易に行うことができました。

最後に

trocco®のワークフローでdbt連携機能を使用することで、別々に実行するしかなかったデータ統合とdbtのデータモデリングが一度に行えるようになり、データ分析基盤の構築がより楽に行えるようになりました。

trocco®のdbt連携機能は、今後も拡張する予定です。
現状のtrocco®のdbt連携機能では、dbtのメリットであるデータマート層のリネージ確認・ドキュメント生成などの恩恵が受けれないため、今後の機能拡張に期待です。

最後まで読んでいただきありがとうございました。

Discussion