👓

【ETL】GUIがあるOSSのAirbyteについて調べてみる

2021/07/20に公開

Airbyteとは

OSSのETLツールでGUIも提供している。
データ取得元はMySQL、Salesforce、Marketo、Google Analyticsなど
デフォルトである程度のコネクタが用意されている。
データ配置先もBigqueryやsnowfrakeなどのクラウドDWH系にも接続も可能。
有償版も存在する。
https://airbyte.io/

特徴

ツール自体が、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サイトのヘルプページへのリンク

ソースコード

https://github.com/airbytehq/airbyte

構成言語など

フロントエンド

TypeScript、React

バックエンド

Python、Java

ビルド

gradle、docker

設定ファイル

yaml形式

開発

フロントエンド

コネクタの追加

開発したコネクタはGUIで取り込める模様。
https://docs.airbyte.io/integrations/custom-connectors

入力画面

コネクタを追加した際にそのコネクタ用の情報入力画面を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」となっている部分を
自分で書き替えていくスタイルでコネクタを作成できる。
https://docs.airbyte.io/contributing-to-airbyte/building-new-connector

プラクティス

toy-container(おもちゃのコンテナ)という名目で
特定の外部APIを例にして
コネクタ追加の一連の流れをチュートリアルとして公開している。
https://docs.airbyte.io/tutorials/toy-connector

起動

以下のようにすればローカルで起動できる。
※docker for desktopをインストール済前提

git clone https://github.com/airbytehq/airbyte.git
cd airbyte
docker-compose up

Discussion