OCI Data Integration 増分ロードの実行（Object Storage編）

# はじめに
OCI Data Integrationのデータ・フローおよびデータ・ローダータスクでファイルやデータを増分ロードする機能があります。機能が利用できるデータ・ソースはリレーショナル・データベース、オブジェクト・ストレージ、Oracle BI Publisherを使用したOracle Fusion Applications（BIP）となります。
オブジェクト・ストレージの場合について、データ・フローで動作を確認してみようと思います。

# 増分ロードの設定
データ・フローのターゲット演算子の詳細に**増分ロード**がありました。これをチェックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/cdeaf8a3-2dc6-c98d-34c1-d7562a8cbba7.png)

作成したデータ・フローの内容はCSVファイルのデータをAutonomous DatabaseのEMP_TABLEにロードするというものです。間の式演算子（Expression）は日付データの型変換をしているだけのものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/ccb05b87-2bcc-f27c-10d7-1369b5487d84.png)

# タスクの実行
データ・フローを使用する統合タスクを作成し、アプリケーションに公開して実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0d853830-b35b-5742-24f6-48e225adda5e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/aa22aeb2-ca98-f023-971d-8862718b4382.png)

実行すると以下の画面が表示されました。DATETIMEとしてSYS.LAST_LOAD_DATEというパラメータが使用されるようです。そのまま実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/810263df-a70d-ffc1-1ffd-95befe905a6b.png)

成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c9818b35-91c1-ef16-435a-580a4e5b92c4.png)

Autonomous Database側で確認すると、14行データがロードされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/51bb9e3a-ef32-a795-b2a7-4bcbc2ef577f.png)

# ファイルの更新後に再実行
EMP_JP.CSVの内容を更新してみます。坂本さんのSALを4000に変更しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/dce7416f-19ac-b16a-1f57-4626054aae44.png)

Object Storageにアップロードし、再度タスクを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/225cf12c-89b0-8f79-d3fc-9d62cb0a9be1.png)

パラメータのSYS.LAST_LOAD_DATEは、最初のタスク実行時は[1970-01-01 00:00:00]でしたが、今回は最初にタスクを実行したときの時間になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/8c241676-8ebf-ae3d-dd74-0e894917f032.png)

実行した結果は14行でファイルの内容がすべて入力されたことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/5a2e6596-7d96-8ed5-d09d-c1c4eb22667c.png)

したがって、Autonomous Database側は行が28行になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/8b96743a-e2ba-c8b3-9f02-346af59684ce.png)

# ファイルを更新しないで再実行
次はファイルを変更せずに実行してみました。結果はエラーになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2acc623b-be18-8ad8-5217-d5d1a327f9f3.png)

ログを参照すると、条件に合ったファイルが存在しないとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6909316e-0327-c0c2-20c4-0641c8a7028c.png)

つまり、実行時に最後にタスク実行された時間がシステム・パラメータSYS.LAST_LOAD_DATEのデフォルトの値として渡され、それ以降のタイムスタンプのファイルを対象にするといった動作のようです。このSYS.LAST_LOAD_DATEの値の変更は可能ですが、指定はUTCである必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b6dd92fd-6627-ecbf-2334-f92d44af2eef.png)

なお、スキーマ・ドリフトの機能が無効になってしまいますが、条件に合ったファイルが存在しないというエラーを無視して実行させるオプションもあります。ソース演算子の拡張オプションのタブで、**スキーマ・ドリフトを許可**のチェックを外し、**欠落しているファイルを空として扱います**にチェックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/7c2f93b2-3f1f-01c6-3013-c199fba984ab.png)


# おわりに
OCI Data Integrationでオブジェクト・ストレージ上のファイルの増分ロードを試してみました。ファイルが更新されたときだけ処理させたいというようなときに利用できると思います。

# 参考資料
[OCI Data Integrationドキュメント：ソース演算子](https://docs.oracle.com/en-us/iaas/data-integration/using/using-operators.htm#operator-source)