
Fivetranのdbt Transformationを「Scheduled in Code」の方法で試してみた
この記事は公開されてから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.ymlをdbt_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の定義も別のブログで行っているため、ぜひご覧ください!





















