【ETL】GUIがあるOSSのAirbyteについて調べてみる
Airbyteとは
OSSのETLツールでGUIも提供している。
データ取得元はMySQL、Salesforce、Marketo、Google Analyticsなど
デフォルトである程度のコネクタが用意されている。
データ配置先もBigqueryやsnowfrakeなどのクラウドDWH系にも接続も可能。
有償版も存在する。
特徴
ツール自体が、dockerのコンテナとして稼働する。
未対応のコネクタなどは、カスタムコネクタとして自ら作成可能。
コネクタはすべて個別のdockerコンテナとして取り扱われる。
ETLの流れ
Extract(抽出)→Load(読込)→Transform(変換)の流れ。
データ配置先の形式に合わせるためのデータ変換は最後に実施する。
コネクタ種類
以下にデフォルトで対応。
結構豊富。
データ取得元コネクタ
Amazon Seller Partner
Amplitude
Appstore
Asana
AWS CloudTrail
Braintree
ClickHouse
CockroachDB
Db2
Dixa
Drift
Exchange Rates API
Facebook Marketing
Files
Freshdesk
GitHub
GitLab
Google Ads
Google Adwords
Google Analytics
Google Directory
Google Search Console
Google Sheets
Google Workspace Admin Reports
Greenhouse
HTTP Request
Hubspot
Instagram
Intercom
Iterable
Jira
Looker
Klaviyo
Mailchimp
Marketo
Microsoft SQL Server (MSSQL)
Microsoft Teams
Mixpanel
Mongo DB
MySQL
Okta
Oracle DB
PayPal Transaction
Pipedrive
Plaid
PokéAPI
Postgres
PostHog
Quickbooks
Recharge
Recurly
Redshift
Salesforce
Sendgrid
Shopify
Slack
Smartsheets
Snowflake
Square
Stripe
SurveyMonkey
Tempo
Twilio
Zendesk Chat
Zendesk Sunshine
Zendesk Support
Zendesk Talk
Zoom
データ配置先コネクタ
BigQuery
Google Cloud Storage (GCS)
Google Pubsub
Local CSV
Local JSON
MeiliSearch
MySQL
Oracle
Postgres
Redshift
S3
SQL Server (MSSQL)
Snowflake
注記
データ取得元がローカルファイルの場合の読込に関しては現在ベータ版しかない。
今後改修予定
ベータ版制限
指定できるパスが「/local/」に限定される。
GUI構成
サービスTOPページで表示されるメニューバーは以下の通り。
※TOPページは「Sources」の画面が表示される。
No | 画面名 | 説明 |
---|---|---|
1 | Connections | コネクション管理。個々のETLの作成/変更/削除ができる。SourcesとDestinationsの組み合わせを作って管理。 |
2 | Sources | データ取得元管理。データ取得元の作成/変更/削除ができる。コネクション管理であらかじめ作成したコネクションを指定することもできる。 |
3 | Destinations | データ取込先管理。データ取込先の作成/変更/削除ができる。コネクション管理であらかじめ作成したコネクションを指定することもできる。 |
4 | Admin | コネクタ管理。デフォルトで提供されているコネクタの管理ができる。→Airbyteによるコネクタverアップデートの取込とか。自分で追加したコネクタの管理もできる。 |
5 | Slack | AirbyteのSlackへの参加リンク |
6 | Help | AirbyteのWEBサイトのヘルプページへのリンク |
ソースコード
構成言語など
フロントエンド
TypeScript、React
バックエンド
Python、Java
ビルド
gradle、docker
設定ファイル
yaml形式
開発
フロントエンド
コネクタの追加
開発したコネクタはGUIで取り込める模様。
入力画面
コネクタを追加した際にそのコネクタ用の情報入力画面をGUIで表示する必要がある。
しかし、javascriptコードを書いて直接画面を追加することは想定されていない。
どのように実現しているか
各コネクタのソースコード配下の「spec.json」にて入力画面を定義できる。
このjsonに記載された項目が画面生成時に入力欄として反映される。
例)redshift
以下のように定義すると
「properties」オブジェクト配下の「host」、「port」、「database」、「username」、「password」が入力欄になる。
{
"documentationUrl": "https://docs.airbyte.io/integrations/destinations/redshift",
"connectionSpecification": {
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Redshift Source Spec",
"type": "object",
"required": ["host", "port", "database", "username", "password"],
"additionalProperties": false,
"properties": {
"host": {
"description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)",
"type": "string"
},
"port": {
"description": "Port of the database.",
"type": "integer",
"minimum": 0,
"maximum": 65536,
"default": 5439,
"examples": ["5439"]
},
"database": {
"description": "Name of the database.",
"type": "string",
"examples": ["master"]
},
"username": {
"description": "Username to use to access the database.",
"type": "string"
},
"password": {
"description": "Password associated with the username.",
"type": "string",
"airbyte_secret": true
}
}
}
}
バックエンド
ソースコードの中身をゴリゴリ書き換えるというよりは、
airbyteにて提供される手順に沿って開発した資材を組み込む感じ。
コネクタの開発
テンプレートを利用してコネクタのdockerを作成する。
ジェネレータコマンドがあるので、
それでひな形を作って「TODO」となっている部分を
自分で書き替えていくスタイルでコネクタを作成できる。
プラクティス
toy-container(おもちゃのコンテナ)という名目で
特定の外部APIを例にして
コネクタ追加の一連の流れをチュートリアルとして公開している。
起動
以下のようにすればローカルで起動できる。
※docker for desktopをインストール済前提
git clone https://github.com/airbytehq/airbyte.git
cd airbyte
docker-compose up
chameleonmeme.com/ きっかけは、偶然同じ現場で働いていたエンジニア3人の 「もっと仕事にのめり込んだり、熱中したいよね」という雑談でした。 営業から開発、サービスの提供まですべての工程を自分たちの手で行い、 気の合う仲間と楽しく仕事をすることで熱中するためにチームをスタートしました。
Discussion