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

2023.03.20

さがらです。

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

今回、FivetranのUI上でスケジュール設定を行う「Scheduled in Fivetran」の方法について試してみたので、本記事でその内容をまとめてみます。

事前準備

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

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の画面からdbtのModel実行のスケジュール設定ができるようになります。

Fivetran上でdbt Transformationのスケジュール設定

では、Fivetran上でdbt Transformationの設定をしていきたいと思います!

Fivetranの画面上でTransformationsを押した後に、画面右上のAdd transformationsを押し、dbt Transformationを押します。

スケジュールの設定はModel1つごとに設定可能なので、Modelのドロップダウンのリストからスケジュール設定をしたいModelを選択します。

すると、設定画面の下部にSet Scheduleが追加で表示されます。3つ選択肢が出てきますので、お好きな方法で設定をしましょう。

一番上のFully integratedですが、dbtでSourceとして定義したFivetranでロードされるテーブルが、Fivetranによってロード処理が行われた直後にこのModelを実行することができます。データが更新されたらdbtで対応するModelも更新してほしいと思いますので、一番使う頻度は多い設定かなと思います!

上から二番目のPartially integratedですが、Fivetranのロード直後ではなく、任意の頻度でdbtのModelを実行します。もしFivetranのロードと実行タイミングが被った場合には、Fivetranのロード完了後にdbtのModelが実行されます。

上から三番目のIndependentですが、任意の頻度や時刻でdbtのModelを実行するということは上述のPartially integratedと変わらないのですが、Independentの場合はFivetranのロード処理とタイミングが被ったとしても、関係なくdbtのModelを実行します。

スケジュール方法について説明しましたが、ここでは一番目のFully integratedで進めます。

Set scheduleの設定が終わったら、右下のSaveを押します。(Save & Runを押すと、スケジュール設定を保存するだけでなくて対象のdbtのModelが実行されます。)

FivetranのロードからdbtのModelまで通して実行してみる

では、先程dbt Transformationの設定をFully integratedで設定してみたので、Fivetranのロード直後にdbtのModelが実行されるかを確かめてみます!

対象のコネクタにおいて、SYNC NOWを押し更新をしてみます。

すると、dbt TransformationにおいてもdbtのModelの実行が行われ、SUCCEEDEDとなりました!

対象のModelをクリックすると、対象のModelを実行するまでのリネージと、dbtコマンドの実行履歴が確認できます。

今回はtestなしでModelだけ定義していたのですが、dbt run --models +orders_by_monthというdbtコマンドが実行されていたようです。+がModel名の先頭に付いているため、スケジュール設定したModelの上流に位置するModelをすべて実行するようなコマンドが実行されていました。

※2023/3/24追記:dbtのtestについて

一度dbt Transformationのスケジュール設定を行った後、対象のTransformationのScheduleタブにおいて、末尾にExecute tests after each model runにチェックを入れて、Saveを押すと、modelの実行後に関連するtestが実行されます!

最後に

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

Scheduled in Code」の方法だとdbt上でdeployment.ymlを事前に定義しないと行けないのですが、「Scheduled in Fivetran」の方法だとFivetranの画面上の操作だけで定義出来るのは楽で良いなと感じました!