dbt

TROCCO dbt連携編

こんにちは、エクチュアの照沼です。

前回のブログでTROCCO入門編としてデータの転送・データマートの定義・ワークフローの作成の方法について触ってみました。今回はその続きとしてTROCCOのdbt連携について触っていきたいと思います。

前回のブログが気になる方は下のURLから確認してみてください。
https://ex-ture.com/blog/2025/05/01/trocco_for_beginner

目次

  1. dbtとは
  2. GitHubリポジトリの作成
  3. dbt Gitリポジトリの作成
  4. dbtジョブの設定
  5. GitHub Actionsを用いたTROCCOでのdbtドキュメント生成

  6. 0.dbtとは

    まずdbtって何?という人もいると思うのでdbtについて解説していこうと思います。
    dbtはELTツールの中のT(変換)を担うツールです。
    dbtはデータカタログの生成、テスト・検証機能の組み込み、安全性の高い管理が可能なツールです。拡張SQLを用いることで、ソフトウェアエンジニアリングのベストプラクティスを取り入れた開発が行えます。
    dbtにはdbt Coreとdbt Cloudの二種類があります。
    dbt Coreとdbt Cloudの機能の違いは以下の表になります。

    項目dbt Coredbt Cloud
    提供形態オープンソース(無料)SaaS(有料プランあり)
    実行環境ローカル環境(CLI)クラウド上で実行
    セットアップ手動(Python環境&CLIセットアップが必要)Web UIから簡単セットアップ
    スケジューリングAirflow, Prefect, dbt Cloud APIなど外部ツールが必要内蔵のスケジューリング機能あり
    コラボレーションGitベースの管理 (個別に設定)Web UIでチーム管理、変更履歴トラッキング
    認証・権限管理手動で設定シングルサインオン (SSO) 連携対応
    ログ管理ローカルログのみ実行履歴やログをWeb UIで確認可能
    CI/CDの統合GitHub Actions, GitLab CI/CD などを設定する必要あり内蔵のCI/CD機能で簡単に統合可能
    サポートコミュニティベース公式サポートあり(有料プラン)


    dbt Coreは無料である反面、Web UIがないため使いづらく、スケジューリング機能も備わっていないなどの弱点があります。
    そこで、TROCCOの出番です。TROCCOにはdbt Coreを使う機能が備わっています。
    TROCCOを通じてdbt Coreを使えば、Web UIで操作できたり、スケジューリングができたりと、dbt Coreの弱点をカバーできます
    そんな親和性の高いありがたい機能を触っていきたいと思います!!

    1.GitHubリポジトリの作成

    dbt coreはGitHubを用いて管理をするのでまずGitHubのリポジトリを作成していきます!
    GitHubにログインし、Homeを開くと下の画像になるので「New」をクリック!

    クリックしたら下の画像になるのでRepository nameを入力し、「Create repository」をクリックすれば完成!

    2.dbt Gitリポジトリの作成

    次に、TROCCOに先ほど作成したリポジトリを用いて、dbt Gitリポジトリを作成していきます。
    dbt Gitリポジトリの新規作成をクリックすると下の画像になるので必須情報を入力します。また、今回は前回のブログで作成したテーブルに対して作業を行うのでアダプタとしてはSnowflakeを用います。

    記入項目説明
    名前自由
    リポジトリURL設定したいリポジトリのSSHをコピーして貼り付け
    ブランチ名リポジトリ内のブランチを入力

    入力が完了し、保存を押すと入力画面の上に、下の画像のようなDeploy keyが表示されるのでコピーしておきます。

    次にGitHubのSettings> Deploy keysにコピーしたDeploy keyを登録します。

    ここまでできればdbt Gitリポジトリの登録が完了しました。

    3.dbtジョブの設定

    dbtジョブ設定の新規追加をクリックすると下の画像になるので必須情報を入力します。

    記入項目説明
    名前自由
    dbt Gitリポジトリクリックすると候補が表示されるので1で作成した名前を選択
    ※候補が表示されない場合は下のdbt Gitリポジトリをクリックしてからもう一度
     行うと表示される。
    実行コマンド今回はdbt deps⇒dbt buildを行うように設定

    ※TROCCOで実行できるdbtコマンド一覧
     dbt deps:packages.ymlファイルに記述されている依存関係をダウンロード
     dbt run:モデルの処理実行
     dbt test:テストコードを実行
     dbt snapshot:dbt_project.ymlファイルで定義された
            snapshots-pathsにあるスナップショットを実行
     dbt seed:dbt_project.ymlファイルで定義された
          seed-pathsで見つかったCSVファイルをロード
     dbt build:dbt run + dbt test + dbt snapshot + dbt seedをDAG順に実行
     dbt run-operation:dbtで定義したマクロ(SQLスクリプト)を実行する

    これで実行をすれば、TROCCOによるdbtの実行は完了です!
    次にせっかくdbt使うならドキュメントを作成したい!ところですがTROCCOの実行コマンドにはdbt docs generate・dbt docs serveコマンドはないのでGitHub ActionsとTROCCOのワークフローを用いてドキュメント生成ができるようにしていきたいと思います。


    4.GitHub Actionsを用いたTROCCOでのdbtドキュメント生成

    全体の流れとしてはdbt docs generateを実行するGitHub Actionsを作成し、TROCCOのワークフローにあるHTTPリクエストを用いてGitHub Actionsを実行する流れになります。

    まず、GitHub Actionsを作成します。
    以下のようにコードを書くことでdbt docs generateを実行することができます。

    name: Generate dbt docs after trocco run
    
    on:
      repository_dispatch:
        types: [trocco]
    
    
    jobs:
      generate_docs:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Set up Python
            uses: actions/setup-python@v5
            with:
              python-version: '3.11'
    
          - name: Install dbt and dependencies
            run: |
              pip install dbt-core dbt-snowflake
    
          - name: Set up profiles.yml
            run: |
              mkdir -p ~/.dbt
              cp ./profiles.yml ~/.dbt/profiles.yml
    
          - name: dbt deps
            run: |
              dbt deps
    
          - name: Generate dbt docs
            run: |
              dbt docs generate
    

    ※重要なのがrepository_dispatchの部分です。
     ここのtypesにはこの後設定するHTTPリクエストボディに設定する値が入ります。

    しかし、このままではワークフローが終了すると、GitHub Actionsの仮想環境が削除されるため、生成したドキュメントは見れません。そのため、ドキュメントはS3などに保存する必要があります。
    保存する場所はご自身の環境に合わせて設定してみてください!

    ちなみに…
    S3に保存するの場合は以下のようなコードになります。

          - name: Upload docs to S3
            env:
              AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
              AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
            run: |
              pip install awscli
              aws s3 sync target/ s3://my-dbt-docs-bucket/ --delete

    ※このコードを使用する際は二点作業をしてから使ってください!
    1.「s3://my-dbt-docs-bucket/」はご自身のS3のURLに変更してください。
    2.secrets.AWS_ACCESS_KEY_IDsecrets.AWS_SECRET_ACCESS_KEY関しては以下の手順でAWSの情報を登録してください。

    🔧 シークレットの登録手順:

    1. GitHubリポジトリのページへ移動
    2. SettingsSecrets and variablesActions を選択
    3. New repository secret をクリック
    4. NameAWS_ACCESS_KEY_ID を入力
    5. Secret にキーの実際の値(AWS IAMのアクセスキー)を入力
    6. 保存


    次に、TROCCOワークフローの設定になります。
    TROCCOワークフローを開いたらHTTPリクエストをクリックします。
    すると下の画像になります。ここでは、名前・URL・HTTPメソッド・HTTPリクエストボディ・HTTPヘッダを入力していきます

    記入項目説明
    名前自由
    URLhttps://api.github.com/repos/<アカウント名>/<リポジトリ名>/dispatches
    の形で入力
    <>の部分は自分の環境に合うように設定
    HTTPメソッドPOSTを選択
    HTTPリクエストボディ{“event_type”: “trocco”}
    の形で入力
    troccoの部分はGitHub Actionsのtypeで設定した値を入力
    HTTPヘッダこの中には二種類のキーと値を入力
    1.キー:Accept 
      値:application/vnd.github.everest-preview+json

    2.キー:Authorization 
      値:Bearer <GitHubのPAC(personal access tokens)>

    acceptの値に関してはそのまま入力すればok
    Authorizationの値はBearer の後にGitHub上で生成したトークンの値
    を入力する必要がある(下の画像:トークン取得画面)
    ※トークンに必要な権限としてrepoの項目を選択しておく必要があるので注意
     また、トークン生成の画面がわかりにくいところにあるので注意
     (右上のアイコン > Setting > Developer setting > Tokens (classic)からいけます)

    ここまで入力出来たらワークフローに配置していきます。
    このワークフローでは3で作成したdbtジョブを実行した後に、dbtドキュメントを生成する流れで作っていきます。作成したのが下の画像のワークフローになります。

    このワークフローを実行した上で、S3に出力されたドキュメントファイルを何らかのサーバー(例:静的Webホスティング環境など)でホストすることで、下の画像のようなドキュメントをWeb上で閲覧できるようになります。

    今回の内容は以上です。


    dbtのドキュメントを生成するには少し工夫が必要ですが、dbt buildなどなら少ない設定ででき、とても便利でした。
    TROCCOとdbtはとても親和性が高いツールだと思うのでぜひ使ってみてください!!

KARTEの「フレックスエディタ(β)」登場!ノーコードでここまでできる!前のページ

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Trying Out dbt Fusion

    dbt

    dbt Fusion使ってみた

    こんにちは、中村です。先日dbt meetup #14に参加…

  2. GitHub Actions

    GitHub ActionsでGCEへのデプロイを楽にしてみた

    はじめに今回はgithub actionsを導入する…

  3. dbt

    dbt_expectationsでデータ品質を向上させよう

    はじめにこんにちは、中村です。皆さんはdbt(data bu…

  4. dbt

    Snowflake Summit 2025 参加レポート【Day3】

    こんにちは、エクスチュアの黒岩です。Snowflake Su…

  5. dbt

    dbt Cloud使ってみた

    こんにちは、中村です。データ界隈で名前を聞かない日がないdbtですが…

  6. Snowflake

    TROCCO入門

    こんにちは、エクスチュアの照沼です。みなさん、ELTツールと…

カテゴリ
最近の記事
  1. TROCCO dbt連携編
  2. KARTEの「フレックスエディタ(β)」登場!ノーコードでこ…
  3. dbt Projects on Snowflake使ってみた…
  4. Cortex Analystを使ってみた
  5. SnowflakeのAI_SQLと再帰CTEで遊ぶ(Snow…
  1. Tableau

    上位N件セットを使って「その他」を効果的に表現する【Tableau】
  2. IT用語集

    クラス(Class)って何?
  3. Adobe Experience Cloud

    Adobe Marketing Cloud:サインインで問題が起きたときの対処法…
  4. ChatGPT

    Open Interpreter+VScode+Dockerで生成AIによるコー…
  5. ブログ

    秋とチラシとリードのスコアリング機能
PAGE TOP