# About Incremental Loading

Treasure Data CDPの多くのbatch input connectorsは、incremental data loadingをサポートしています。この機能は、次のような場合に便利です:

- data sourcesが大きすぎて、定期的に完全に再インポートできない場合。
- 情報を最新の状態に保つために、更新されたデータを頻繁にインポートする必要がある場合。
- 使用量を最適化するために、取り込まれる行数を最小限に抑える必要がある場合。


## Incremental Loadの仕組み

incremental loadingを有効にするには、data sourceに新しいレコードを識別するのに役立つ特定のカラム(例: created_date)が必要です。incremental loadを有効にする方法は、Integration HubとTreasure ワークフローのどちらを使用しているかによって異なります。

## Integration Hub経由のIncremental Load

Integration Hubでsource settingを使用する場合、incremental loadメカニズムはTreasure Dataによって管理されます。プロセスは次のように機能します:

1. ユーザーは1つ以上のincremental columns(例: `id,` `created_at)を指定します。`
2. input connectorは定期的に実行されるようにスケジュールされます。
3. Treasure Dataは、`Config Diff`という特別なセクションにincremental columnsの最新の値を自動的に記録します。
4. スケジュールされた各実行で、connectorはこれらの記録された値に基づいて新しいレコードのみを取得します。


Treasure Dataはlast_recordsを自動的に維持および更新するため、ユーザーは各実行のためにparametersを手動で設定する必要はありません。

このアプローチは、前回のスケジュールされた実行以降に変更されたobject targetsのみを取得したい場合に便利です。
例えば、UIでは:

![](/assets/incremental1.bd8de63b4b82f357f5dfd0776df91405e70977c6d82d8927be94760cd09eaaaa.9b411a8b.png)

MySQL、BigQuery、SQL serverなどのdatabase integrationsでは、incremental dataをロードするためにcolumnまたはfield namesが必要です。例えば:

![](/assets/incrementalloading.7d9cc254817b7a3d616c26f0a9bcea5ff5c67203dc8f00fe2d3c401ed94e3b6b.9b411a8b.png)

## Treasure ワークフロー経由のIncremental Load(推奨)

Treasure ワークフロー経由でincremental loadingを設定する場合、プロセスはユーザーによる明示的な管理が必要です。UIベースのアプローチとは異なり、Treasure ワークフローはincremental valuesを自動的に追跡しません。代わりに:

1. ユーザーは、`session_time`やその他のworkflow parametersなどのworkflow variablesを使用して、独自のincremental logicを定義します。
2. この`session_time値はconnector configuration fileに注入されます。`
3. workflowが実行されるたびに、指定されたsession timeを使用してどのデータをインポートするかを決定します。
4. workflow sessionが失敗した場合、同じ`session_time`を再利用してデータの一貫性を確保できます。


このアプローチは、履歴データを再ロードする必要があるbackfill operationsなどのシナリオを処理できるように、より柔軟性を持つように設計されています。

### incremental loading用のYMLファイルを作成する

このアプローチでは、input connectorのincremental-loading機能は使用されません。代わりに、workflow variablesがconnector configurationに注入され、各workflow sessionでデータの異なる部分をロードできるようになります。

1. workflow variableの使用を宣言するworkflow definitionを作成します。workflowは、incremental loadingやその他の目的に役立つさまざまなvariablesを提供します。
![](/assets/image-20240906-102329.185571543c525237614e864df719771ad9739dc84b33eb7ece3500e9bf113bcd.9b411a8b.png)
2. `last_session_time` variableをinput connector configuration fileに注入します。
![](/assets/image-20240906-102711.f98a8bef8b79782b82df229906b096bca532647f92c6b1c011443d2e48930391.9b411a8b.png)
3. workflowによってinput connectorがトリガーされると、適切なlast session timeがconnector configuration fileに注入されます。失敗したworkflow sessionのリトライがある場合、variable valueは変更されません。


これらのアプローチの違いを理解することで、ユーザーは特定のdata ingestionニーズに基づいて最適な方法を選択できます。