はじめに
データ基盤について調べていると、Snowflakeやdbtと一緒に**「Fivetran」**という名前を見かけることがあります。
私自身、
「FivetranってETLツール?」
「Snowflakeやdbtとは何が違うの?」
「結局、どの部分を担当するサービスなの?」
と疑問に思ったので、今回はFivetranについて調べてみました。
この記事では、
- Fivetranとは何か
- Fivetranが担当する処理
- ETLとELTの違い
- Snowflakeとの関係
- dbtとの役割の違い
- Fivetranを使うメリット
について、初心者向けに整理していきます。
Fivetranとは?
Fivetranは、一言でいうと、
「さまざまなシステムからデータを取得し、Snowflakeなどのデータ基盤へ自動的に連携するためのサービス」
です。
Fivetranでは、データの取得元をSource(ソース)、データの格納先を**Destination(デスティネーション)**として扱います。
Connectorを設定すると、Sourceからデータを取得し、Destinationへ書き込むデータパイプラインを構築できます。(Fivetran)
イメージすると、
Salesforce
│
NetSuite
│
MySQL
│
PostgreSQL
│
▼
┌──────────┐
│ Fivetran │
└────┬─────┘
│
▼
Snowflake
という感じです。
例えば、
「Salesforceにある顧客データをSnowflakeへ連携したい」
という場合に、そのデータ連携部分をFivetranに任せることができます。
FivetranはETLではなくELT寄り
データ連携では、
ETL
と
ELT
という言葉がよく登場します。
ETLは、
Extract
データ取得
↓
Transform
データ加工
↓
Load
DWHへ格納
という流れです。
一方、ELTでは、
Extract
データ取得
↓
Load
DWHへ格納
↓
Transform
DWH上で加工
という順番になります。
Fivetranでは基本的に、SourceのデータをDestinationへできるだけ忠実に複製し、本格的な加工はDestination側で行うという考え方が採られています。
そのため、FivetranはELT型のデータパイプラインで利用しやすいサービスと考えると分かりやすいです。(Fivetran)
Fivetranは何をしてくれるのか?
例えばSalesforceのデータをSnowflakeへ取り込みたいとします。
自分たちでデータ連携処理を作る場合、
Salesforce API
↓
Pythonなどでデータ取得
↓
差分データを判定
↓
Snowflakeへ登録
↓
エラー処理
↓
定期実行
といった仕組みを実装する必要があります。
さらに、Source側でカラム追加などのスキーマ変更が発生した場合、その対応も必要になります。
Fivetranを利用すると、Connectorを通してこうしたデータ同期を自動化できます。
データベースConnectorの場合、最初に対象データをInitial Syncし、その後は新規・変更されたデータを増分でDestinationへ同期します。また、Source側のスキーマ変更を検知してDestination側へ反映する仕組みも用意されています。(Fivetran)
つまり、
「データを持ってくる部分をできるだけ自前で作らなくてよくする」
のがFivetranの大きな役割です。
Snowflakeとの関係
FivetranとSnowflakeは競合するサービスではなく、役割が違います。
ざっくり分けると、
Fivetran
→ データを集めてくる
Snowflake
→ 集めたデータを保存・処理・分析する
という関係です。
FivetranはSnowflakeをDestinationとしてサポートしているため、さまざまなSourceからSnowflakeへデータを同期できます。(Fivetran)
例えば、
Salesforce ──┐
│
NetSuite ────┤
▼
Fivetran
│
▼
Snowflake
│
▼
データ分析
という構成が考えられます。
複数システムに散らばっているデータをSnowflakeへ集約する際に、Fivetranがデータ連携部分を担当するわけです。
dbtとの違いは?
Fivetranと一緒によく登場するのが**dbt(data build tool)**です。
ここが最初は少し分かりにくいところです。
ざっくり、
Fivetran = データを運ぶ
dbt = 運んだデータを加工する
と覚えると分かりやすいです。
例えば、
Salesforce
│
▼
Fivetran
│
▼
Snowflake
RAWデータ
│
▼
dbt
│
▼
加工済みデータ
│
▼
BI・分析
という構成です。
dbtではSQLを使って、Destinationに格納されたデータを分析しやすい形へ変換できます。
例えば、
SELECT
customer_id,
SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
のようなSQLによる変換処理をモデルとして管理します。
Fivetranにはdbt Coreとの連携機能もあり、dbtプロジェクトのSQLをDestination上で実行して、テーブルやViewを作成できます。(Fivetran)
つまり、
Fivetran
↓
Extract + Load
Snowflake
↓
データを保持
dbt
↓
Transform
という役割分担ができます。
Fivetranだけでデータ加工はできないの?
ここで、
「じゃあFivetranはデータを運ぶだけで、加工は一切できないの?」
という疑問が出てきます。
実際には、FivetranにもTransformationsという仕組みがあります。
Fivetranでは、あらかじめ用意されたデータモデルを利用したり、dbt Coreなどと連携してDestination上のデータを変換したりできます。
また、Connectionの同期完了後や設定したスケジュールに合わせてTransformationを実行することもできます。(Fivetran)
ただし基本的な考え方としては、
FivetranでSourceからDestinationへデータを同期し、Destination上でdbtなどを使って本格的に加工する
と理解しておくと分かりやすいです。
Fivetranを使うメリット
Fivetranを使う大きなメリットは、データ連携処理を自前で開発・運用する負担を減らせることです。
例えば自分たちで、
Salesforce API
↓
Python
↓
バッチ処理
↓
Snowflake
という仕組みを作った場合、
- API仕様変更への対応
- 差分取得
- スキーマ変更
- エラー処理
- 再実行
- 定期実行
- データ型のマッピング
などを考える必要があります。
Fivetranでは、初回同期後の増分同期やスキーマ変更への追従などが仕組みとして提供されています。(Fivetran)
そのため、データエンジニアは**「データをどう運ぶか」よりも、「集めたデータをどう活用するか」へ時間を使いやすくなる**というメリットがあります。
Snowflake × Fivetran × dbtを整理する
ここまでをまとめると、それぞれの役割はかなりシンプルです。
| サービス | 主な役割 |
|---|---|
| Fivetran | データを取得・連携する |
| Snowflake | データを保存・処理する |
| dbt | SQLでデータを変換する |
例えば、
Salesforce
NetSuite
各種DB
│
▼
Fivetran
【Extract / Load】
│
▼
Snowflake
【Data Warehouse】
│
▼
dbt
【Transform】
│
▼
分析用テーブル
│
▼
BI / 分析
という構成になります。
これなら、Fivetranがどこを担当しているのか分かりやすいですね。
今回調べて分かったこと
調べる前は、
「Fivetranもデータ加工をするETLツールなのかな?」
というイメージを持っていました。
しかし実際には、
「さまざまなSourceからデータを取得して、SnowflakeなどのDestinationへ継続的に同期する」
という部分がFivetranの中心的な役割でした。
そして、
Fivetranで集める → Snowflakeに蓄積する → dbtで加工する
という組み合わせを理解すると、それぞれの役割がかなり整理しやすくなります。
特にSnowflakeを使ったデータ基盤を勉強している場合、Fivetranとdbtまでセットで理解しておくと、実際のデータパイプライン構成をイメージしやすくなると思いました。
まとめ
今回はFivetranについて調べてみました。
ポイントをまとめると、
- Fivetranはデータ連携を自動化するサービス
- SourceからDestinationへデータを同期する
- SnowflakeをDestinationとして利用できる
- 初回同期後は新規・変更データを増分同期できる
- ELT型のデータ基盤と相性が良い
- dbtと組み合わせてDestination上でデータを加工できる
- データ連携処理を自前で開発・運用する負担を減らせる
ということが分かりました。
個人的には、
Fivetran = 運ぶ
Snowflake = 貯める・処理する
dbt = 加工する
と覚えるのが一番分かりやすいと思います。
Snowflakeを中心としたデータ基盤を理解するうえでも、この3つの役割を整理しておくと良さそうです。