【OCI】Data Integrationでオブジェクトストレージ上のデータをADWにインポートしてみる

# はじめに

OCI Autonomous Database(ADB)にファイルをインポートするには
いくつか方法があるかと思いますが、今回はオブジェクトストレージ上に
アップロードされた複数のファイルをDate Integrationを使って
一括インポートする方法をご紹介したいと思います。

■Data Integrationとは？
そもそもData Integrationはどのようなものなのかというとデータの
ETL（抽出、変換、ロード）プロセスを簡素化するマネージドサービスとなります。
様々なソースからデータを抽出し、必要に応じて変換して目的のデータベースや
データウェアハウスにロードする作業を効率化します。
コーディング無しでデータパイプラインを構築できるため、
比較的簡単にデータ連携することが可能です。

Data Integrationについては、基本的に以下チュートリアルを見れば
詳しく手順が書いてあるので理解できるかと思いますが、
少しボリュームが多いため、本ブログではもう少し簡素化した形で
ご紹介したいと思います。

■参考
https://oracle-japan.github.io/ocitutorials/intermediates/ocidi-tutorials/

今回検証してみる環境はローカルPCからオブジェクトストレージに
アップロードしたjsonファイルをパブリックサブネットに作成した
Data Integrationを使ってADW（Autonomous Data Warehouse）に
インポートする構成となります。
※本来ADWはVCN上のプライべートサブネットに作成するのが望ましいですが、
今回はローカルPCからアクセスできるように
「アクセス・タイプ: すべての場所からのセキュア・アクセスを許可」
としています。

■構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/21c0bfc3-fcc3-8f38-36d9-ababf96ec640.png)

■事前準備
・アカウント
Data Integration, ADW, オブジェクトストレージが使用できるOCIアカウントを準備
（ポリシーを細かく設定したい場合はチュートリアルを参考にしてください）

・ネットワークの設定
VCN、プライベートサブネットを作成しておきます。
（NAT Gateway, Service Gatewayを設定し、外部及びオラクルネットワークに
アクセスできるように構成しておきます）

ネットワークの作成方法についてはこちらを参考にします。
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/

◆目次
1.オブジェクトストレージのバケット作成
2.jsonファイルのアップロード
3.ADWのインスタンス作成
4.スキーマ／テーブル作成
5.Data Integration設定
6.データ・フローの実行テスト

## 1.オブジェクトストレージのバケット作成
最初にバケットの作成をしていきます。

左上メニュー[Ξ]からストレージ → バケットを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/99baa8e5-43b0-eb25-bad2-eb09bf32635c.png)

そのままバケットの作成を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/bfbd9fcc-74be-b4d0-adf7-cb9ced5542b6.png)

バケット名に任意の名前を入力して作成を選択
※ここではbucketDIという名前にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/6a3da1dd-903a-2973-93c1-cc8e0a0276c4.png)

これでバケットが作成されたので、名前のリンクを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/a56aa3de-2e35-6cfe-42aa-0760218f7b01.png)

バケット内に遷移すると下の方にアップロードボタンがあるので
ここからファイルをアップロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/48f9cca6-fc9d-5c91-72ad-ff47f9a39e5c.png)

以上でオブジェクトストレージのバケット作成は終了です。

## 2.jsonファイルのアップロード

続いてADWにjsonファイルをインポートするために
①～③のテストデータを準備します。

①data01.json
```
[
  {"id": 1, "col1": "a"},
  {"id": 2, "col1": "b"},
  {"id": 3, "col1": "c"},
  {"id": 4, "col1": "d"},
  {"id": 5, "col1": "e"}
]
```

②data02.json
```
[
  {"id": 6, "col1": "f"},
  {"id": 7, "col1": "g"},
  {"id": 8, "col1": "h"},
  {"id": 9, "col1": "i"},
  {"id": 10, "col1": "j"}
]
```

③data03.json
```
[
  {"id": 11, "col1": "k"},
  {"id": 12, "col1": "l"},
  {"id": 13, "col1": "m"},
  {"id": 14, "col1": "n"},
  {"id": 15, "col1": "o"}
]
```

作成したファイルをアップロードするため、バケット内のアップロードを選択し、
「ファイルをここにドロップします」のエリアにファイルをドラッグ＆ドロップし
アップロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/ac7ba4fc-b15c-b90d-586b-a483ca4bcae4.png)

アップロードが完了すると終了済みとなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/5eb6a25e-1d22-3766-3217-2bc97425aef1.png)

一覧に戻るとファイルがアップロードされていることが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/2ea6a7e7-7159-1af9-6414-f4ad8b87409e.png)

以上でjsonファイルのアップロードは終了です。

## 3.ADWのインスタンス作成

次はjsonファイルのインポート先のADWインスタンスを作成します。

左上メニュー[Ξ]からOracle Database → Autonomous Data Warehouseを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/4eeaeee1-6815-4ede-a20f-1e26e0b66d71.png)

Autonomous Databaseの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/2a1f935c-7f25-691f-514c-62eafe3cd677.png)

ここからはADWインスタンスに必要な項目だけ入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/a60eabfa-5d45-8f3e-b129-41f8971007ce.png)

表示名: adw01（任意）
データベース名: adw01（任意）
ワークロード・タイプの選択: データ・ウェアハウス
デプロイメント・タイプの選択: サーバーレス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/38201aa9-b2b9-9969-17d1-1b1478b4a85e.png)

以下の項目はデフォルト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/51d520df-cbf0-bcc9-7232-6e62db027f9a.png)

データベース・バージョンの選択: 19c
ECPU数: 2
ストレージ(TB): 1

続いて以下の項目を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/268fee3d-d710-f14d-9217-f65d73048e7e.png)

パスワード: *****（任意）
ネットワーク・アクセスの選択: すべての場所からのセキュア・アクセス

他の項目について特に必要ないため、
そのままAutonomous Databaseの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/11d6082c-c1a7-c62b-36de-c13eb6abc80a.png)

正常に作成されると以下一覧にADWインスタンスが表示されるので
名前のリンクを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/c14c7a50-c866-378e-423d-274671b76f3d.png)

最後にADWに接続するためのウォレットを予めダウンロードしておくので
データベース接続を選択し、インスタンス・ウォレットを選択後、
ウォレットのダウンロードを実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/39d915f6-36c9-01ae-2374-c062e2075ccc.png)

※この後の手順でパスワードの入力を聞かれるので任意の値を設定

以上でADWのインスタンス作成は終了です。

## 4.スキーマ／テーブル作成

続いてスキーマ／テーブルを作成しますので、
ADWの詳細ページからデータベース・アクションのSQLを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/0cf7eda9-8926-337a-3572-b722765c5315.png)

SQLが実行可能なワークシートが表示されるので
ADMINでスキーマ（diuser）を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/58fb4847-8567-969f-0747-a674b466cae3.png)

・スキーマ（ユーザ）作成SQL
```
CREATE USER diuser IDENTIFIED BY "＜パスワード＞";
GRANT CREATE SESSION TO diuser;
GRANT CREATE TABLE TO diuser;
GRANT UNLIMITED TABLESPACE TO diuser;
```

テーブルも作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/3d8f4116-5844-a531-5952-7e5990debe9b.png)

・テーブル作成SQL
```
create table diuser.tblDI
(
    id number(10) primary key, 
    col1 varchar2(50)
);
```

以上でスキーマ／テーブル作成は終了です。

## 5.Data Integration設定

ここではData Integrationの設定を説明したいと思いますが、
その前に構成がどうなっているかを図で表すと以下のような
イメージとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/1289be23-e1a3-d8dd-ebbe-50dbc712f23e.png)

■機能概要
・ワークスペース
Data Integration全体を管理する仮想スペース

・プロジェクト
タスク（データフロー等）の設計のまとまり
※プログラムのソースコードのようなもの

・アプリケーション
タスクの実行環境
※プログラムの実行ファイルのようなもの

・データアセット
データソース、ターゲットに対する接続ポイント
  
・手順の流れ
[1] ワークスペースの作成
[2] アプリケーションの作成
[3] データアセットの作成
　- データソース[オブジェクトストレージ]の接続ポイント作成
　- ターゲット[ADW]の接続ポイント作成
[4] プロジェクトの作成
　- データフローの作成
　- タスクの作成
[5] プロジェクトタスクのアプリケーションへのPublish（公開）

***
[1] ワークスペースの作成

左上メニュー[Ξ]からアナリティクスとAI → データ統合を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/817b87fe-c865-7736-c928-77ecb0a85239.png)

ワークスペースを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/6ba3d96b-18b4-b8a9-bfa9-c83582651dae.png)

ワークスペースの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/9028557c-4727-293f-fff4-05fe76e87837.png)

名前（任意）、VCN、プライベートサブネットを選択し、作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/448db20d-52a2-908a-129c-dfd23399a65b.png)

***
[2] アプリケーションの作成

ワークスペースが作成されると一覧の表示されるので
名前のリンクを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/e3b9fbd9-5716-4c18-2cc4-81af4b374335.png)

アプリケーションを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/dd97d5c8-3463-9770-35ca-e9d5d8796bb4.png)

アプリケーションの作成の新規作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/c9d5d750-e161-85cb-dc45-66c9408f0d49.png)

ブランク・アプリケーションの作成の新規作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/9783b4d6-b95c-d0e8-1cbb-6d9dc41ad7d3.png)

任意の名前をつけて作成を選択
ここではdi_ap01
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/ab606a69-0972-2abc-25bb-eaa2d9cf191d.png)

***
[3] データアセットの作成
- データソース[オブジェクトストレージ]の接続ポイント作成

データ・アセットの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/8d3f5367-3964-cdca-dfb1-a7b16a426cda.png)

OCIオブジェクト・ストレージを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/5d558e5a-82bf-8c46-8fe0-f8ef63e580ab.png)

任意の名前を入力
ここではDA_ConOS01
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/a507536c-5dbc-e41a-e56a-71d18ccaa960.png)

接続テストで問題ないことを確認して作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/363bc416-e944-dec7-42eb-48d9afa9f156.png)

- ターゲット[ADW]の接続ポイント作成

再度ワークスペースのトップからデータ・アセットの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/921bfba6-114e-5d2d-7b44-ab7c17042b04.png)

今回はOracle ADWを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/5bce1a48-6ed6-46c1-f609-cf91468d0c39.png)

任意の名前をつけて、タイプがOracle Autonomous Data Warehouseに
なっていることを確認
ここではDA_ConADW01
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/27642974-a07d-021d-2169-7bee1c2561de.png)

ウォレットをアップロードし、パスワードを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/ad65b1c2-035e-7672-adc4-d2b57f6e56ee.png)

ユーザ名 [admin] ／パスワードを入力し、TNSを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/4ffc4460-42b7-9331-cda4-a18eafaf9d7f.png)

下記の項目を入力・選択し、接続テストで問題がないことを確認して
作成を選択
オブジェクト・ストレージ・データ・アセット: 前段で設定したアセット (DA_ConOS01)
接続: デフォルト
コンパートメント: 任意
バケット: 先程設定したバケット（bucketDI）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/28b3948f-4fa6-c125-ac8d-c6b928bb26cf.png)

再度ワークスペースのトップに戻り、プロジェクトを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/47e3bddb-c715-9df3-ab68-0bfda3421219.png)

***
[4] プロジェクトの作成
- データフローの作成

プロジェクトの作成-新規作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/f48d94cc-4991-2e2e-cbcf-34baed5de85d.png)

任意の名前をつけて、作成を選択
ここではpjDI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/e22b2217-ab50-56be-a0a6-b5f63301fa4a.png)

データ・フローを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/7ba7a70d-47d8-fee7-89e0-cc1eacedea8c.png)

データ・フローの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/75593018-2719-864d-63c5-dc282afc2f01.png)

データ・フロー作成画面が表示されたら左のツールボックスから
ソースとターゲットのアイコンをそれぞれ中央エリアにドラッグ＆ドロップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/96835fed-c9bc-131d-dbba-0d173184d682.png)

ソースをマウスオーバーすると紐づけするための線が引っ張れるようになるので
ターゲットへドラッグ&ドロップしてリンク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/50d7e54a-9b9c-c48b-3ca3-23fa027213bd.png)

リンクできたら、ソースを選択し、
下のプロパティ欄にあるデータ・アセットを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/f80103ef-7a6e-e6aa-df5e-cf784398754b.png)

先程作成したオブジェクトストレージのデータ・アセット（DA_ConOS01）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/d03e477f-02fc-f5be-2cf0-3d071578a238.png)

接続についてはデフォルト接続を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/a8867ed4-e50d-c4c7-6d2b-2e9a71c499c3.png)

ここまでくるとバケットが選択できるようになるので
予めて作成しておいたバケット（bucktDI）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/2e309926-0fff-9e00-457a-546d25dd6891.png)

続いてデータ・エンティティのパターンで参照を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/7a971a10-12be-8301-a987-3388dd7f21cc.png)

パターン入力欄があるので今回はdataで始まるファイルを
対象するという意味で[data*]を入力し、パターンを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/3ebe06b6-6598-e488-3705-5c6753f25426.png)

ファイルタイプはJSONにして、他はデフォルトのまま選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/66254265-7912-74f5-f7af-95315b721f53.png)

次はターゲット側のデータ・アセットを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/0f34fb0f-f9f3-9589-dd5b-1de6f03508b1.png)

先程作成したADWのデータ・アセット（DA_ConADW01）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/8580a9d0-145f-8b73-ec83-501ad8f825e8.png)

オブジェクトストレージと同様にここまで来るとスキーマが選択可能となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/d4f6a5bc-c80d-19d3-f217-420cdff14aa7.png)

スキーマ選択ではすべてを表示で検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/26b7849d-3585-06dc-45a7-60a942dec37d.png)

スキーマ検索でDIUSERを絞り込んでから選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/df312cdb-8cc7-6dbf-4688-fd6de5fe5d75.png)

データ・エンティティは予め作成しておいたテーブル（tblDI）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/b741302e-6eea-5a10-de88-5d7b78dce80d.png)

ステージングの場所についてはデフォルトの設定のまま選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/d9a1231c-1d5f-d1f6-8348-8fcbee38a6f8.png)

マップタブでカラムのマッピングができているか確認
今回はカラムが同じなので自動でマッピングされている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/e87d5d11-4951-babf-dbfd-aba2dad9771f.png)

そこまで終わったら検証ボタンで問題がないことを確認して作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/32d8df2d-df86-31f6-45ed-46772e4aca43.png)

プロジェクトのデータ・フローを見ると作成されていることが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/fbdf3ba5-2d6f-5beb-2896-1bcd0540b2a7.png)

- タスクの作成

続いてタスクの作成で統合を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/5913f40f-e52f-820a-5ea5-b73f23c1f0ac.png)

任意の名前を付けて、先ほど作成したデータ・フローを選択して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/235c7671-64fa-32b1-84ef-e61612b366fb.png)

[5] プロジェクトタスクのアプリケーションへのPublish（公開）

タスク一覧に作成できていることが確認できるので
右端のプロパティからアプリケーションに公開を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/f2ed6829-0a71-2607-e419-f592555ae0bc.png)

アプリケーション名（di_ap01）を選択して公開
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/1c7420e2-4bee-807d-cf91-3668cdabf47d.png)

以上でData Integration設定は終了です。

## 6.データ・フローの実行テスト

最後にjsonファイルの一括インポートを実行してみたいと思います。

アプリケーション一覧からdi_ap01を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/d4864742-979a-8a31-ba96-1e2bc86ad0b0.png)

di_ap01内にタスクが作成されているので右プロパティから実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/da47e5c9-331e-6e7a-a01c-86041d42bd92.png)

タスクが正常終了するとステータスが成功となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/6667b128-7657-f01f-46d2-368c93c2eff2.png)

SQLで確認するとjsonファイル３つ全てがインポートされていることが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/67cb0351-220c-647c-c951-3c6241080940.png)

※スケジュール登録すれば定期的にタスクを実行することも可能です。

## おわり
以上、Data Integrationを使って簡単にデータ連携をすることができました。