Airbyteについて調べてみた

# 背景・目的
[Modern Data Stackを簡単に整理してみた](https://qiita.com/zumax/items/64f460648847cfae7779)
の記事に書いた、ETLツールのうち、Airbyteというものを知りました。
簡単に特徴を整理したいと思います。

# まとめ
下記の特徴があります。

|特徴 |内容 |
|:--|:--|
|概要|2020年創業のテックカンパニー<BR>企業名＝プロダクト名<BR>40,000人以上のエンジニアが使用している|
|機能|・300以上のコネクタ<BR>・構造化と非構造に対応<BR>・コネクタを数分で構築または編集<BR>・コード不要のコネクタ ビルダーを使用してカスタム コネクタの構築が可能<BR>・スキーマ変更の検出と伝搬ができる。|
|操作方法|・UI<BR>・Terraform provider<BR>・API|
|スケジューラー|・Scheduled sync<BR>・Cron<BR>・Manualy|
|Sync Modes|・Full Refresh Overwrite<BR>・Incremental Append<BR>・Full Refresh Append<BR>・Incremental Append + Deduped|

# 概要
## Airbyteとは？

[クラスメソッド](https://dev.classmethod.jp/articles/dive-deep-into-modern-data-saas-about-airbyte/)さんのページから引用します。

> Airbyteは2020年にサンフランシスコで創業されたテックカンパニーです。創業からわずか1年でシリーズAに到達し、$26Mの資金調達に成功しているスタートアップで、急激な成長速度で業界から注目を集めています。

- 2020年創業のテックカンパニー

[Airbyte](https://airbyte.com/)のページから引用します。

> データの移動に必要な唯一の ELT ツール
40,000 人以上のエンジニアが、堅牢なデータ統合プラットフォームである Airbyte を使用して、コネクタの最も包括的なカタログからデータを複製しています。

- 40,000人以上のエンジニアが使用している

> Leverage the largest catalog of  connectors
> Airbyte’s catalog of 300+ pre-built connectors is the largest in the ELT Tool industry and is doubling every year, thanks to our open-source ELT approach.
Our data integration platform supports both structured and unstructured data sources for both your data and AI use cases.

- 300以上のコネクタ
- 構造化と非構造に対応

> Build or edit connectors in minutes
Build custom connectors in 10 min with our no-code connector builder, along with over 1,000+ engineers building connectors every month. Add them to Airbyte to enable your whole team to leverage them.
Edit any Airbyte connectors to fit your custom needs.

- コネクタを数分で構築または編集
- コード不要のコネクタ ビルダーを使用してカスタム コネクタを 10 分で構築できる。
- 毎月 1,000 人を超えるエンジニアがコネクタを構築している。それらをAirbyteに追加すると、チーム全体がそれらを活用できるようになる。
- カスタム ニーズに合わせて Airbyte コネクタを編集できる

> Manage your ELT pipelines your way
下記がある。
- UI
- Terraform provider
- API

## Configuring Connections
> 接続はソースを宛先にリンクし、データの同期方法を定義します。 接続を作成した後、構成設定またはストリーム設定を変更できます。
- Connectionsはソースを指定し、構成する。

### Sync Schedules
> For each connection, you can select between three options that allow a sync to run. The three options for Replication Frequency are:

接続ごとに、下記の3つのオプションから選択可能です。
- Scheduled (e.g. every 24 hours, every 2 hours)
- Cron scheduling
- Manual

#### Sync Limitations
- 接続ごとに一度に実行できる同期は 1 つだけ
- 前の同期が完了する前に同期が実行されるようにスケジュールされている場合、スケジュールされた同期は前の同期の完了後に開始される。
- Airbyte Cloud では、同期は最大 60 分ごとに実行可能。 
- 1 時間に 1 回を超える頻度でレプリケーションが必要な場合は、営業担当者に問い合わせる。

#### Scheduled syncs
> スケジュールされた接続が最初に作成されると、作成直後に同期が実行されます。 その後、最後の同期 (手動でトリガーされたかスケジュールによってトリガーされたかに関係なく) からの時間がスケジュール間隔を超えると、同期が実行されます。 例えば：

> 10 月 1 日午後 2 時、ユーザーは 24 時間ごとにデータを同期するための接続を設定します。
10 月 1 日、午後 2 時 01 分: 同期ジョブが実行されます
10 月 2 日、午後 2 時 1 分: 最後の同期から 24 時間が経過したため、同期がトリガーされます。
10 月 2 日午後 5 時: ユーザーが UI から手動で同期をトリガー
10 月 3 日、午後 2 時 1 分: 最後の同期が行われてから 24 時間以内であるため、同期は実行されません
10 月 3 日、午後 5 時 1 分: 最後の同期から 24 時間以上経過しているため、同期が実行されます。

- つまり、Scheduledで設定した場合、最後の実行時間が優先される。これにはマニュアル実行も含まれる。

#### Cron Scheduling
> 同期のスケジュールをより正確に設定したい場合は、CRON スケジュールを使用して、特定の日または月の時刻を設定することもできます。
> Airbyte は Quartz の CRON スケジューラを使用しています。 必要な形式を理解するには、ドキュメントを読むことをお勧めします。 次の例も参照できます。

- 正確に設定する場合は、Cronを使用する。

#### Manual Syncs
> 接続が手動の頻度で複製されるように設定されている場合、同期は自動的に実行されません。
これは、UI を通じていつでも [今すぐ同期] ボタンをクリックすることによってトリガーできます。また、API を通じてトリガーすることもできます。

- マニュアル実行の場合は、当然だが手動で行われ、自動的に実行されない。
- UIの他、APIでも実行できる


## Sync Modes
> 同期モードは、Airbyte がソースから読み取り、宛先に書き込む方法を制御します。Airbyte は、さまざまな使用例に対応するために、さまざまな同期モードを提供します。混乱を最小限に抑えるために、モードの動作はその名前に反映されています。Airbyte の同期モードを理解する最も簡単な方法は、モードの名前の付け方を理解することです。

> 名前の最初の部分は、ソース コネクタがソースからデータを読み取る方法を示します。
> 同期モード名の 2 番目の部分は、宛先コネクタがデータを書き込む方法を示します。これは、ソース コネクタがデータを生成した方法には影響されません。

- つまり、Sync Modeの挙動は下記の通り
    - 読み込み方法と書き込み方法 

- 下記の4つがあるようです。

|Sync Modes | 特徴|読み込み|書き込み|備考| 
|:--|:--|:--|:--|:--|
| Full Refresh Overwrite | ストリーム全体を同期し、宛先のデータを上書きして置き換えます。|全てのデータを抽出|完全に置き換え|削除されたものも反映される。|
|Full Refresh Append |ストリーム全体を同期し、宛先にデータを追加します。|同上|新しいデータが追加される|・データの重複が発生する可能性あり<BR>・削除されたデータは残り続ける。|
|Incremental Append|ストリームから新しいレコードを同期し、宛先にデータを追加します。|最後の同期以降に変更、追加されたデータのみがソースから抽出される|同上|削除されたデータは残り続ける。|
| Incremental Append + Deduped |ストリームから新しいレコードを同期し、宛先にデータを追加します。<BR>また、ソースのストリームの状態をミラーリングする重複排除されたビューも提供します。|同上|新しいものが追加されるのは同じだが、重複を除いた状態で履歴データを持つ|同期の度に履歴が保持され、データの変更履歴が追跡される|重複は排除される。元データは削除される。|


削除時の挙動が気になったので、絵にしてみました。

### Full Refresh Overwrite

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5a3c458c-d2f7-2899-06cd-81b3638572bd.png)

- Source と Destが全く同じ状態になります。

### Full Refresh Append
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/783f7d4e-e968-22a4-0111-88e8bb985f8d.png)

- Sourceのすべての状態を、Destに追加します。

### Incremental Append

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fe83e5ab-423e-4739-41d1-423a9745618f.png)

- 削除されたものは反映されない。


### Incremental Append + Deduped

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/aae0bf47-e754-b588-e091-65caeff432c5.png)

- 削除は、Incremental Appendと同じ。履歴が残るとのこと。

## Schema Change Management
> Airbyte がソース内のスキーマの変更をどのように処理するかを接続ごとに指定できます。このプロセスにより、正確かつ効率的なデータ同期が確保され、エラーが最小限に抑えられ、データ パイプラインの管理にかかる時間と労力が節約されます。
> Airbyte は、同期の直前に、ソース スキーマの変更を最大 24 時間に 1 回チェックします。

- スキーマの変更を伝搬できる。
- 24Hに一度チェックする。

- Propagate all field and stream changes	
    - ソースからのすべての新しいテーブルと列の変更は、宛先に自動的に伝播され、反映されます。これには、ストリームの変更 (追加または削除)、列の変更 (追加または削除)、およびデータ型の変更が含まれます。
- Propagate field changes only
    - 列の変更のみが反映されます
- Detect changes and manually approve	
    - スキーマの変更は検出されますが、伝播されません。同期は、設定したスキーマを使用して引き続き実行されます。検出されたスキーマ変更を反映するには、変更を手動で承認する必要があります
- Detect changes and pause connection
    - スキーマの変更が検出されるとすぐに、接続は自動的に無効になります。

# 参考
今回、Airbyteを調べてみました。Ingestionに強みがあるように感じました。今後、機会があれば使ってみたいと思います。

# 考察
https://airbyte.com/

https://dev.classmethod.jp/articles/dive-deep-into-modern-data-saas-about-airbyte/


https://docs.airbyte.com/?_gl=1*s11n9v*_gcl_au*MTUzNDQ5NTM0Ny4xNzA1NzM4MTk1