Fivetranのdbt Transformationを「Scheduled in Code」の方法で試してみた

2023.03.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

Fivetranではdbtで定義したsqlを実行できる「dbt Transformation」という機能があるのですが、Fivetran上でスケジュール実行する方法が2023年3月20日時点で「Scheduled in Fivetran」と「Scheduled in Code」の2種類あります。

今回、dbt上でYAMLファイルを作成しスケジュールを定義する「Scheduled in Code」の方法について試してみたので、本記事でその内容をまとめてみます。

事前準備

Fivetranの設定

事前に、Googleスプレッドシートコネクタを用いて、Snowflakeへデータをロードしておきます。

dbt projectの作成

まず、dbt_project.ymlをリポジトリのルート直下に配置して作成します。dbt Cloudで開発する場合は、Gitリモートリポジトリはdbtホストでないものを使用しましょう。

続いて、上述のordersテーブルを参照するSourceを定義します。dbt Transformationを使う上で、Sourceの定義は必須です。

  • models/sources.yml
version: 2

sources:
    - name: jaffle
      database: SAGARA_FIVETRAN_DEMO_DB 
      schema: JAFFLE_SHOP_FROM_GOOGLE_SHEETS
      tables:
        - name: orders

このSourceを参照するModelを2つ定義し、MainブランチにMergeしておきます。

  • models/orders_by_month.sql
select
    date_trunc(month,order_date) as order_yearmonth,
    status,
    count(*) as order_count
from
    {{ source('jaffle','orders') }}
group by
    1,2
  • models/orders_by_year.sql
select
    date_trunc(year,order_date) as order_yearmonth,
    status,
    count(*) as order_count
from
    {{ source('jaffle','orders') }}
group by
    1,2

加えて、deployment.ymldbt_project.ymlと同じ階層に、下記のように定義します。「Scheduled in Code」の方法では、deployment.ymlが必須となり、どのコマンドをどのスケジュールで実行するかを事前に定義しておく必要があります。

以下のコードは、公式Docのサンプルを参考に定義してみました。

  • deployment.yml
jobs: 
  - name: daily
    schedule: 0 12 * * * # This example will run every day at 12:00pm
    steps:
      - name: run models
        command: dbt run 
      - name: test models
        command: dbt test

Fivetran上での設定

設定画面の起動

まず、Fivetran上でTransformationsを押し、対象のDestinationを選択します。

続いて、Connect your dbt projectを選択します。これでdbt Transformationの設定画面が立ち上がります。

Fivetranによる対象のGitリポジトリへのSSHアクセスを許可する

Fivetranが対象のdbt projectを管理するGitリポジトリへのSSHアクセスを許可させるための設定を行っていきます。

dbt Transformationの設定画面において、Public Keyをコピーします。

次に、GitHubにおいて対象のリポジトリのSeetingsからDeploy keysを開き、Add deploy keyを押します。

Titleに任意の名称を入力した後、KeyにFivetranの画面でコピーしたPublic Keyを貼り付けて、Add keyを押します。Allow write accessはチェック不要です。

dbt Transformationの設定画面に戻って設定の続き

以下の情報を入力後、設定画面末尾のSave & Testを押します。

  • Repository URL:対象のリポジトリについてSSHアクセス用のURLを貼る
  • Default Schema Name:対象のdbt projectによってオブジェクトが生成される先のスキーマ名を入力

この後、対象のリポジトリの情報の読み取りに5~10分ほど必要としますが、その後でFivetranのTransformationsの画面からdeployment.ymlで定義したジョブを確認できるようになります。

Fivetran上でdbt Transformationのジョブを確認

ではFivetran上で、deployment.ymlで定義したジョブを確認してみます!

確認方法は簡単で、Fivetranの画面でTransformationsから対象のDestinationを選択すれば、すぐに確認可能です!

対象のジョブをクリックすると、ジョブの実行履歴や登録されているスケジュール時刻などを確認可能です。

定義したdbt Transformationのジョブをマニュアル実行してみる

最後に、定義したdbt Transformationのジョブを一度マニュアル実行してみます。

対象のジョブの詳細画面に移動し、右上のRun Nowを押します。

ジョブが上手く実行すると、Run logタブに履歴が出てきます。

ログをクリックすると、実行されたコマンドが出てきます。

最後に

Fivetranのdbt Transformationを「Scheduled in Code」の方法で試してみました。

Scheduled in Fivetran」と比べた時の利点は、やはりコードで各種スケジュールを定義出来るところかなと思いました。一方で、「Scheduled in Code」の方法だとFivetranでのロード直後にdbtのModelを実行することはできないため、その点だけ注意です!

おまけ

Scheduled in Fivetran」の方法を用いたdbt Transformationの定義も別のブログで行っているため、ぜひご覧ください!