[Oracle Cloud] Data Integration のチュートリアルをやってみた

# はじめに

Data Integration は、様々なデータアセットからデータを取り込み、データのクレンジング・変換・再形成・変換などの ETL 処理が出来るフルマネージドサービスです。サーバー管理が不要で、GUI で視覚的にわかりやすく ETL 処理を表現できます。

2020.09.13 現在、次のデータアセットに対応しています。取り込み元、書き込み先の両方に利用できます。

- Object Storage
- Oracle Database
- Autonomous Data Warehouse
- Autonomous Transaction Processing



Data Integration のチュートリアルが、Document に公開されています。Document では文章で書かれている箇所が多く、分かりにくい部分もあります。今回の記事では、このチュートリアルの内容を、スクリーンショット付きで紹介していきます。

チュートリアルURL
https://docs.cloud.oracle.com/en-us/iaas/data-integration/tutorial/tutorials/index.htm



チュートリアルの内容は次の内容を行っていきます。

- Object Storage に格納した、csv ファイル・json ファイルのデータを加工して、Autonomous Data Warehouse に格納する。



# Data Integration の概念

Data Integration は、若干複雑な概念があります。チュートリアルの中で各種用語が出てくるので、どういった役割かざっくり把握しておくとよいでしょう。

![1599958354657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/92d2527b-6d25-1fad-8639-5bbe424f0746.png)



公式の定義や、詳細な説明は Document に書かれています。
https://docs.cloud.oracle.com/en-us/iaas/data-integration/using/overview.htm



# IAM Policy

Data Integration を実行するために、IAM Policy の設定が必要です。チュートリアル的に始める場合は、次の設定でとりあえず大丈夫です。

```
allow service dataintegration to use virtual-network-family in tenancy
allow service dataintegration to inspect compartments in tenancy
allow service dataintegration to inspect users in tenancy
allow any-user to use buckets in tenancy where ALL {request.principal.type='disworkspace'}
allow any-user to manage objects in tenancy where ALL {request.principal.type='disworkspace'}
allow any-user {PAR_MANAGE} in tenancy where ALL {request.principal.type='disworkspace'}
```



Data Integration がアクセスするリソースや許可範囲を狭くしたい場合は若干変更することも出来ます。詳細は次の Document を参照してください。
https://docs.cloud.oracle.com/en-us/iaas/data-integration/using/preparing-for-connectivity.htm#dis-access



# Create Subnet

Data Integrator は、VCN 内に作ることも出来ますし、VCN 外に作ることも出来ます。一度作ると変更は出来ないため、VCN 内に作るのが良いでしょう。VCN 内のリソース・VCN 外のリソースの両方にアクセスが出来て便利です。

VCN 内に作るときは、Route Table や Security List の関係上、Data Integration 専用の Subnet を作るのが便利です。

![1599852132767.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/45d6d9a4-e4b1-6b3d-d5b0-b0f869ccf474.png)



Data Integration が Object Storage などにアクセスするため、Service Gateway を設定します。All Service 用の Service Gateway が良いです。

![1599866067971.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/22963b1b-29df-bd64-8a28-dc61c2ca229e.png)



# Data Integration の作成に関するハマりどころ

Data Integration 上で様々な物を作成・定義しますが、2020年9月13日現在、日本語を入力するとエラーになります。Task の Run や、Data を参照したときに次のエラーが出たときは、日本語の入力を全て除去してみると良いです

```
DIS_DATA_XPLORER_0008 - Error in getting interactive job run for opcRequestID: csidc42cde1649b58a4c7cc685fff2f4/748d205d42a94bc8b168219be93a5458, Caused by: java.nio.charset.MalformedInputException: Input length = 1.
```





# Create Workspace

Data Integration で Workspace を作成します。ハンバーガーメニューから Data Integration を選択します。

![1599850543284.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/c881346c-b6fd-245d-bf0e-a35a0234b449.png)



Create Workspace を押します。

![1599850578989.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/9265980a-0031-13da-de77-f7dfd005ac47.png)



各種パラメータを入れて、Create をします。**日本語などのマルチバイトを入れないように注意しましょう。**
Workspace は、Subnet を指定して作ります。

![1599852222968.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/95e3892b-6349-6b21-e6e6-1caafdf7c3e1.png)



Creating となります。

![1599852237628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/bca58432-ba31-08b9-6eb6-84f7e5ed610a.png)



自分の環境では、約 15 分ほど待機すると、Active となりました。

![1599861111532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6feceaee-26f0-bc81-ba9e-436916b194a4.png)



# Import Sample Data

次のチュートリアルで公開されている Sample データをダウンロードして、Object Storage の Bucket へ格納します。
https://docs.cloud.oracle.com/en-us/iaas/data-integration/tutorial/tutorials/00_get_sample_data.htm



次の URL にアクセスして、Sample Data をダウンロードします。
https://objectstorage.us-ashburn-1.oraclecloud.com/n/dispaas/b/oci-dataintegration-lab/o/CUSTOMERS.json
https://objectstorage.us-ashburn-1.oraclecloud.com/n/dispaas/b/oci-dataintegration-lab/o/REVENUE.csv



適当に Object Storage の Bucket を作成して、ダウンロードしてきた 2個のファイルをアップロードします。この時に namespace 名も後から使うので、コピーしておくと良いです。

- namespace : `idclaqkuq6tu`

![1599863384486.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/cefb3a01-352d-ed9c-4c38-db9c151bca21.png)





# Connect to Data Sources

データを読み込む元と、データを書き込む先の定義をしていきます。
この手順に関するチュートリアルは、つぎの Document に書かれています。
https://docs.cloud.oracle.com/en-us/iaas/data-integration/tutorial/tutorials/02-connecting-to-data-sources.htm



## Creating the Source Data Asset

作成した Workspace の詳細画面へ移動

![1599864785791.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/1d64d08d-b53f-e114-33df-144ae570bae7.png)



Data Assets を選択

![1599864952444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/fb603a6d-3e7a-f5d8-0f17-16bebc132bed.png)



Create Data Assets

![1599864982228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/1cdd1b55-0124-397a-d537-1de38af45add.png)



Type で選択可能なものは次の 4種類です。

- Oracle Object Storage
- Oracle Database
- Oracle Autonomous Data Warehouse
- Oracle Autonomous Transaction Processing



今回は、Oracle Object Storage と、Oracle Autonomous Data Warehouse を定義します。**各項目に日本語などのマルチバイトを入力すると、エラーになるので注意。英語を入力しましょう**

入力するパラメータ例

- Name : `Data_Lake`
- Description : なし
- URL : `https://objectstorage.ap-tokyo-1.oraclecloud.com`
- Object Storage Namespace : `idclaqkuq6tu`
- Tenancy OCID : 自分の OCID
- Test Connection : 押して Successful になるか確認

![1599947006200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b3693b41-cdce-e564-b6fb-27d9b0054771.png)



Create した Data Asset のページに自動的に移動

![1599866406717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/00cb98c5-0eb0-c555-e1fa-7baffd4d042e.png)



Bucket の欄も見えます

![1599867750651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/26f7b542-9097-dc40-85c7-08515e6c0268.png)



## Preparing the Target Database

Autonomous Data Warehouse 側で、ETL で準備したデータを書き込むときに使う、ユーザーとテーブルを準備します。
SQL Developer Web を開きます。

![1599868381487.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/61ffe96a-2ba2-4315-f9c8-8f3f39c106cf.png)



admin で入る

![1599868481832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/f4d5e9e4-bf85-d142-a1b4-c21f2adec9fc.png)



user を作成。パスワードは適当に変更します。

```
create user beta identified by "mIfoO8_fai12#-gai897fao";
grant DWROLE to BETA;
alter user BETA quota 200M on data;
```



実行

![1599868581277.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/c606242c-1f83-ae35-f594-5330959bb5a1.png)



Table 作成

```
CREATE TABLE "BETA"."CUSTOMERS_TARGET"
   ("CUST_ID" NUMBER,
    "LAST_NAME" VARCHAR2(200 BYTE),
    "FIRST_NAME" VARCHAR2(200 BYTE),
    "FULL_NAME" VARCHAR2(200 BYTE),
    "STREET_ADDRESS" VARCHAR2(400 BYTE),
    "POSTAL_CODE" VARCHAR2(10 BYTE),
    "CITY_ID" NUMBER,
    "CITY" VARCHAR2(100 BYTE),
    "STATE_PROVINCE_ID" NUMBER,
    "STATE_PROVINCE" VARCHAR2(100 BYTE),
    "COUNTRY_ID" NUMBER,
    "COUNTRY" VARCHAR2(400 BYTE),
    "CONTINENT_ID" NUMBER,
    "CONTINENT" VARCHAR2(400 BYTE),
    "AGE" NUMBER,
    "COMMUTE_DISTANCE" NUMBER,
    "CREDIT_BALANCE" NUMBER,
    "EDUCATION" VARCHAR2(40 BYTE),
    "EMAIL" VARCHAR2(416 BYTE),
    "FULL_TIME" VARCHAR2(40 BYTE),
    "GENDER" VARCHAR2(6 BYTE),
    "HOUSEHOLD_SIZE" NUMBER,
    "INCOME" NUMBER,
    "INCOME_LEVEL" VARCHAR2(20 BYTE),
    "INSUFF_FUNDS_INCIDENTS" NUMBER,
    "JOB_TYPE" VARCHAR2(200 BYTE),
    "LATE_MORT_RENT_PMTS" NUMBER,
    "MARITAL_STATUS" VARCHAR2(8 BYTE),
    "MORTGAGE_AMT" NUMBER,
    "NUM_CARS" NUMBER,
    "NUM_MORTGAGES" NUMBER,
    "PET" VARCHAR2(40 BYTE),
    "PROMOTION_RESPONSE" NUMBER,
    "RENT_OWN" VARCHAR2(40 BYTE),
    "SEG" NUMBER,
    "WORK_EXPERIENCE" NUMBER,
    "YRS_CURRENT_EMPLOYER" NUMBER,
    "YRS_CUSTOMER" NUMBER,
    "YRS_RESIDENCE" NUMBER,
    "COUNTRY_CODE" VARCHAR2(2 BYTE),
    "ORDER_NUMBER" NUMBER,
    "REVENUE" NUMBER
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
 
--------------------------------------------------------
--  Constraints for Table CUSTOMERS_TARGET
--------------------------------------------------------
  ALTER TABLE "BETA"."CUSTOMERS_TARGET" MODIFY ("CUST_ID" NOT NULL ENABLE);
  ALTER TABLE "BETA"."CUSTOMERS_TARGET" MODIFY ("SEG" NOT NULL ENABLE);
```



実行

![1599868697632.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/ee3c90c4-6c0d-5615-f9f1-4877c1ac0fda.png)



## Creating the Target Data Asset

ADW を Asset として登録します

![1599868862190.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/9ae910c0-f1b3-f518-7f62-18876e9b2276.png)



入力するパラメータ

- Name : `Data_Warehouse`
- Description : 空白
- Type : `Oracle Autonomous Data Warehouse`
- Wallet File : ダウンロードして貼り付け
- Service Name : 適切に指定
- Name : 任意の名前
- Username : ADW 上で作成したユーザー名を指定
- Password : ユーザーのパスワードを指定
- Test Connection : 成功を確認

![1599947282937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/59d5dc52-073b-3d2c-16a8-e77ea169c01a.png)



自動的にページが変わります

![1599869316851.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/88194756-62c7-c3a0-7ba1-3c98867e47bb.png)



BETA Schemas が見える

![1599869684274.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/7078b6d4-7515-e276-0a3b-f7d13b2aff2f.png)



作った Table が見える

![1599869736825.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/500d94aa-a0f6-efc6-9e0f-4814ad7edcfb.png)



作ったテーブルの構造も見える

![1599869765751.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/39300c16-a059-35d7-f758-f4634de23f24.png)



# Ingest and Transform Data Using a Data Flow

ETL の流れを Data Flow で定義します。Document はこちら
https://docs.cloud.oracle.com/en-us/iaas/data-integration/tutorial/tutorials/03-ingest-and-transform-data-using-a-data-flow.htm



## Creating a Project and a Data Flow

まず Project を作成

![1599870125109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/cf22b486-eb0e-2a8a-9eee-f1881a595a0e.png)



Create Project

![1599870152228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6612fe36-45c3-c1eb-73b6-a7d488913d47.png)



名前を入れます。**各項目に日本語などのマルチバイトを入力すると、エラーになるので注意。英語を入力しましょう**

![1599947469141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/e2b10151-5ee5-9dd3-cb3e-dd589bea6d3e.png)



作成される

![1599870250621.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/e0cdd64c-dbe6-303b-d382-257e2220affb.png)



Create Data Flow

![1599870682423.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/858291a6-e7ad-736f-fb66-f0b8ec96249a.png)



ETL の流れを表現する、Data Flow の名前を入れます。
Name : `Load Customers and Revenue Data` と入れて、Save を押します。

![1599871169475.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/21cf22cf-8657-3872-9dab-9c2a1974bd13.png)





## Adding Source Operators

データソースとして、Data Asset で定義した Object Storage を持ってきます。左のところにあるアイコンを拡大

![1599871637403.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/bba33691-73df-3988-b55a-9d34aa81afc5.png)



次の6種類のアイコンがあります

- Inputs/Outputs
  - Source : データの読み込み元
  - Target : データの書き込み先
- Shaping
  - Filter : フィルター
  - Join : 結合
  - Expression : 新たな列を作成
  - Aggregate : 集合処理

![1599871652056.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/3fb55ef6-285f-cc67-5bf0-7304fe9fe85b.png)



Source をドラッグドロップして、右クリックし、Details を押します。

![1599872185660.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5b0f41ad-1e0f-e62c-9d5d-51d5f40c8034.png)



Data Entity から、Select を押します。

![1599872442815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0325363c-677e-7a56-7934-8d3325859cd8.png)



各種パラメータを入力します。

![1599872552409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5462cc91-6a20-b29f-c9dd-541cafe95f1f.png)



名前変更

![1599872754303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6c43de39-bddc-90e2-d472-8e136bf8ef08.png)



Attributes の Tab から、先ほど指定した JSON データがどのような属性を持っているか確認できます。

![1599947710893.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/a53c33c9-4df6-83a4-4bef-6a658aca35e4.png)



また、実際のデータの中身も確認できます。各種 ETL 処理を組み立てるときに、リアルタイムに中身を見れるので便利です。

![1599947748437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/cadb3ed7-fa55-cb6b-ede7-74827305f0e9.png)



同様の作業を実施して、REVENUE.csv を定義する

![1599873000500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/84a69ac6-8936-3161-4e9c-c6293faf9619.png)



なお、csv の場合は、ヘッダーの有無、エスケープ文字や、分割文字などが指定可能

![1599872883695.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/2f7e6ed5-f069-616d-199a-1c26b81edc79.png)



## Filtering and Transforming Data

次に、データのフィルター処理を行います。Filter Icon をドラッグアンドドロップで置いて、マウスで線を引きます。

![1599875627886.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/8df35e4f-df2b-469a-c2ca-52dfad90cdb7.png)



Filter Icon をクリックして、Filter Condition を Create します

![1599875658221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/f5b1a723-fab3-dbf5-cfcf-971f584cdd00.png)



Filter Condition 画面が開く

![1599875715378.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/51755971-2f31-06b9-e85d-60895a969f3c.png)



sta を入れて、`ORDER_STATUS` を表示

![1599875701189.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6cd97a65-d3b5-8cf9-a5c3-1fcc8716cc0a.png)



ドラッグアンドドロップで右側にもっていく

![1599875783958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/457eea5e-f9eb-6d5d-6a7a-7c1126c4182a.png)



次の文字列に変更します。`1-Booked` 以外の行をフィルターで除外する設定をいれて、Create を押します。
`FILTER_1.REVENUE_CSV.ORDER_STATUS='1-Booked'`

![1599876552347.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0804bb07-a1d1-ab60-fa28-1e20adce37b0.png)



Filter Icon を選択してData Tab を見ると、Filter 後のデータが表示されています。`1-Booked` のデータしか存在していないため、Filter されていることが分かります。

![1599947984837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/d23ea1ce-267f-b803-e999-ca962cd42fab.png)



同様に Customers にも Filter を追加して、Condition の Create を押します

![1599881088604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0139dc39-0f94-0096-7f2b-50b878df6fee.png)



`COUNTRY_CODE` を右側に持って行き、`US` を指定して、Create を押します。

```
FILTER_2.CUSTOMERS_JSON.COUNTRY_CODE='US'
```

![1599881252895.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/4013caf0-38f3-f87a-8d4e-fce9d53669cc.png)



Data Tab を見ると、US で Filter されています。

![1599949001158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b4a3fe36-cc4b-01da-e53c-4fe645497ac5.png)



Expression を追加して、Customer の Filter に繋げて、Add を押します。

![1599885290704.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/75c38fdc-c653-5ed7-c6fd-8d1c422318a2.png)



Expression は、新しい列を生成する処理です。Firstname と Lastname をくっつけて、Fullname を生成します。

- Identifier : 新たに生成する列の名前
- Data Type : 新たに生成する列の Type
- Length : 新たに生成する列の長さ
- Functions から、Concat を見つける

![1599885425688.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/44067113-02d3-95f1-773f-f30460fae003.png)



右側に持ってくる

![1599885470550.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/ebc67946-173f-ced2-74e2-fd85a53b907b.png)



次の文字列を指定して、Fisrtname, Lastname を空白で結合します。

```
CONCAT(CONCAT(EXPRESSION_1.CUSTOMERS_JSON.FIRST_NAME, ' '), EXPRESSION_1.CUSTOMERS_JSON.LAST_NAME)
```

![1599885780948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/2e81ab22-d657-1e0f-b7fa-06b22460feb3.png)



Data Tab を見ることで、Full Name が追加されていることが分かります。

![1599949219921.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/faf16a99-3861-14ac-cc23-532029dab893.png)



## Joining Data

2つのデータを結合します。JOIN Icon を追加して、Condition を Create

![1599887540244.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/13fb6b57-efac-7227-f24d-a68abe44df11.png)



JOSIN に使う条件を指定して、create をします。CUST_ID と CUST_KEY が両方一致しているもののみ、JOIN します。

```
JOIN_1_1.CUSTOMERS_JSON.CUST_ID=JOIN_1_2.REVENUE_CSV.CUST_KEY
```

![1599887728012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/173d2c5e-5093-52c8-3d3f-e01c30406235.png)



Data Tab で Join 後のデータが見えます。

![1599949340117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0d32328c-5a27-c6ad-3ece-63328db620c5.png)



## Adding a Target Operator

Target Icon を追加して、データ処理したあとに ADW にデータを書き込みます。Integration Strategy を Insert にしているため、単純に Table に行を追加する動きになります。

Data Entity から、Select を押します。

![1599888124156.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/cf801966-ddfc-6a66-2103-3079796882b1.png)



Data Assets に定義した ADW の情報を引っ張ってきて、Select を押します。どこのスキーマの、どこのテーブルに書き込むのか指定しています。

![1599888361172.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0049723c-5bfa-08df-4217-6b5ef57eb665.png)



Target Icon を選択したあと、Attributes Tab で、Autonomous Database (Target) 側で持っている Table が表示されています。 Exclude することも可能。

![1599888798030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/4e215841-1a12-ef26-bad2-42cff463209a.png)



Map Tab を見ると、ADW 側のテーブルで持っている 42列のうち、Map 済み 41、Map 無し 1 とわかります。Map 無しの部分はデータが格納されないため、要確認です。黄色背景のところが空白になっており、Mapping されていないことがわかります。

![1599888893512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/8aead8af-1afc-902b-4b79-0724db73871a.png)



左の FULLNAME から、右の FULL_NAME へドラッグすることで、手動でマップできます。

![1599889063765.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6d5265b9-881d-e6c7-ec69-eca23829bf72.png)



また、Filter を Attributes not mapped にすることで、Map されていない列のみ表示が出来ます。

![1599889128234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/81755e93-c516-f23f-b4da-95d38879932d.png)



データ加工処理の設定が終わったため、一旦 Validate を実行します。何かしらエラーが出ていないか確認します。

![1599949583210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/bf60d730-492c-ec20-7749-6167b69627e2.png)



Error が無いことを確認出来ました。

![1599949623476.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/fde96dac-2010-8a72-41e3-74ce5e1ec6c7.png)



Save and Close で保存して閉じます。

![1599889296640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/56cfda8a-3e07-c422-7bf8-c4f360644653.png)



# Create an Integration Task to Configure and Run a Data Flow

Data Flow の定義が出来たので、実際に処理として動かしていきます。Document はこちら
https://docs.cloud.oracle.com/en-us/iaas/data-integration/tutorial/tutorials/04-define-an-integration-task-to-configure-and-run-a-data-flow.htm



## Creating an Integration Task

Projects を開きます。

![1599891446124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/4b629482-92bf-59f2-e0be-5e42de966bb0.png)



Dl_Lab を選択します。

![1599891482859.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/87d5c4e9-cad4-5bcc-6fd9-a9e96d0855c2.png)



Tasks から、Integration タスクを定義します。これはまだ実行ではなく、Task の定義だけです。今回は取り上げませんが、Integration Task を使うと、Data Flow の各処理にパラメータを挿入できます。また別途紹介します。

![1599892128325.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/da721f61-2827-af7f-7189-a470f7eadeff.png)



Name : `Load Customers Lab` を入れたあとに、Select で作った Data Flow を指定します。

![1599949716305.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/62f8afae-1b3c-38d2-e7d8-1d53dc6d45a8.png)



作ったものを選択します。

![1599949758008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/2c0ca4c7-6667-ba22-7b96-4c5da215bc91.png)



Validate 状態が Successful を確認して、Save します。

![1599949808014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/947e3acc-4632-fb9b-7fdd-cdff04f5bb26.png)



Integration Task が、Task として定義されました。

![1599892467954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/cb0d17a7-3b66-93de-daf1-1edd3ee3b641.png)



## Creating an Application

定義した Integration Task を実行するために、Application という枠組みを定義します。Application を押します。

![1599892743363.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6d11286f-7930-9475-214d-9a6a880f251f.png)



Create Application 

![1599892774725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/86bd6d69-9f3c-56cc-9fc4-3880c3165df0.png)



Name : `Lab Application` を入れて、Create します。

![1599892817380.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/e0c99d8c-66ad-73c7-b7eb-f4a76ccdf71e.png)



## Publishing a Task to an Application

Project の Tasks から、Application の Tasks へ Publish します。Publish しただけでは、Task は実行されません。Task の内容がコピーされるイメージです。Application 上で Task を実行する仕組みとなっており、このような操作が必要です。
おそらく、Data Flow 定義者と、Task 実行者の権限を分けたときに、分かりやすい構成になることを意図していると想像しています。

![1599892988105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/42bbcb43-1a96-0b3f-6e1e-ea601b762012.png)



Publish を押します。

![1599893016784.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/3e280554-f220-9d18-e70c-9d6f0139e081.png)



View を押すと、Application 画面に移動します。

![1599893041680.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b474983e-0256-079a-5913-f8c37424c763.png)



Application の Tasks に登録した Task があります。Run を押すと、Task を実行できます。

![1599893164975.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5cd2889d-0369-1b00-e0e6-625777c19410.png)



Loading... と10秒ごど表示されたあとに、右上に成功と表示されます。

![1599893192587.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/80706988-7d4e-bd6a-939c-cccfbab10e6d.png)



画面を更新すると、Queued となっています。

![1599893244398.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/37e205c5-110c-e92a-7f6d-5c7682c771ac.png)



画面を更新すると、Running となっています。

![1599950029249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/a9beb98b-23cd-900f-1d07-83392754dda2.png)



Success となりました。次の情報が表示されています。

- Insert した行
- Data Read の容量
- 実行時間

![1599950088451.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/afa7dd09-33dc-082e-68d3-3d78653a0880.png)



memo : Errorになったときは、Log を出せます

![1599893273494.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/fa0940f8-2c8d-d642-28a5-db22b561b5ae.png)



エラーログがざっと表示されます。

![1599893294814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6de448a7-2bdc-d840-0b0e-9172963c6d83.png)



# ADW の確認

Data Integration で Task 実行の結果、ADW のテーブルにデータが格納されています。

![1599954050787.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/c649dc41-f596-ad4e-5562-85b4fbe76e78.png)



# Task Monitor

Task がどれだけ成功して、失敗したか確認できる、Monitor 用の画面があります。

![1599951815473.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/7d7022a5-305f-0328-260f-b5a34efe5d44.png)



# 参考URL

OCI Document
https://docs.cloud.oracle.com/en-us/iaas/data-integration/using/index.htm

Service Tour (Movie)
https://docs.cloud.oracle.com/en-us/data-integration/service-tour/index.html

Data Flow Tour (Movie)
https://docs.cloud.oracle.com/en-us/data-integration/dataflow-tour/index.html

PM Blogs
https://blogs.oracle.com/dataintegration/oracle-cloud-infrastructure-data-integration