
Fivetranのdbt Transformationを「Scheduled in Fivetran」の方法で試してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
さがらです。
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の画面上の操作だけで定義出来るのは楽で良いなと感じました!

























