Autonomous DatabaseのData Transformsを用いて、異なるスキーマ間でデータの複製をしてみた。

# はじめに
Data Transformsは、Autonomous Databaseに組み込まれているデータ統合ツールです。Database Actionsからアクセス可能で、様々なソースからAutonomous Databaseにデータをロードして変換するためのツールとして知られています。

# 本記事の前提条件 
* ADBインスタンスが構成済みであること
* 下記リンクから**Movie Sales 2020.csv**(売上実績のサンプルデータ)をダウンロードしてあること。<br>
    「[OCIチュートリアル, Oracle Database編, 217: クレデンシャル・ウォレットを利用して接続してみよう](https://oracle-japan.github.io/ocitutorials/database/adb217-use-database-actions/#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)」
* 「 [OCIチュートリアル, Oracle Database編, 403 : Data Transformsを使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb403-data-transforms/)」を事前に行い、Movie Sales 2020.csvをData Transformsを用いて加工した、MOVIE_SALES_2020Q2という表を使用します。

# 作業の大まかな流れ
**～前提条件まで～**
* QTEAMというユーザーを作成し、Movie Sales 2020.csvをロードします。
* Data Transformsを開き、MovieStreamという名前でConnectionを作成し、Autonomous Databaseに接続します。
* QTEAMスキーマにロードしてあるデータ(Movie Sales 2020.csv)をインポートします。
* データの変換作業(データの修正、トリミング)を行います。
詳細は、[OCIチュートリアル, Oracle Database編, 403 : Data Transformsを使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb403-data-transforms/)をご覧ください。
**～本記事～**
- [データを複製する先のスキーマ(QTEAM_TARGET)を作成します。](#qteam_targetスキーマの作成)
- [Data Transforms上で、データ複製のためのReplicate_MoviestreamというProjectを作成します。](#replicate_moviestreamのprojectを作成)
- [前提条件で作成したMovieStreamに加え、MovieStream_TargetというConnectionを作成します。](#moviestream_targetのconnectionを作成)
- [Load Dataの機能を使い、データ複製のソースとなるQTEAMから、QTEAM_TARGETにデータを読み込ませます。](#qteamからqteam_targetにデータを読み込む)
- [実際にデータが複製されたかを確認します。](#データが複製されたかを確認)
# 実際にデータの複製をしてみた
### QTEAM_TARGETスキーマの作成
1. ADBのコンソール画面からDatabase Actionsを起動し、**データベース・ユーザー**をクリックします。
    ![qiita_DataTransforms_Replicate_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/cb80f922-2c78-c30c-a8eb-ae31d283d293.png)
1. **ユーザーの作成**をクリックします。
    ![qiita_DataTransforms_Replicate_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/b2325715-eda3-2930-8fad-c214a82e88a7.png)
1. 次のようにユーザー情報を入力します。
    |  入力項目       |       入力内容 |   
    |:-----------------:|:------------------:|
    | ユーザー        |    QTEAM_TARGET   |   
    | パスワード   　　|    任意      | 
    | パスワードの確認 |      任意 | 
    |Webアクセス  |    ON  |
    | Webアクセス拡張機能→承認が必要 |  ON|
    |表領域の割当制限DATA|	UNLIMITED|
    
    ![qiita_DataTransforms_Replicate_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/839a8622-63ea-fbf1-c6c8-e9d64579ea2d.png)
    * ユーザーを作成ボタンを押す前に、付与されたロールの項目から以下の2つのユーザーロールについて、［付与済］と［デフォルト］の両方にチェックしてください。(後からでも編集できます。)
・DWROLE
・DATA_TRANSFORMS_USER
    ![qiita_DataTransforms_Replicate_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/8c5c3982-4020-bc76-6b98-d3465a4a37a2.png)
    
    ![qiita_DataTransforms_Replicate_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/8a3aa2d2-7606-58e1-4366-2656a163bbbd.png)
1. Database Actionsの起動パッドに戻り、ADMINユーザーからいったんログアウトして、前提条件で作成してある**QTEAM**ユーザーでログインし直します。
### Replicate_MoviestreamのProjectを作成
1. Data Transformsを起動します。
QTEAMユーザーでDatabase Actionsにログインした状態で、起動パッドを開きます。データ変換の項目をクリックし、QTEAMユーザーの情報を入力すると、Data Transformsが起動します。
1. Home画面からProjectsに移動し、Create Projectを押し、Replicate_Moviestreamという名前でProjectを作成します。
![qiita_DataTransforms_Replicate_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/1bbb6d7f-5f7d-8643-7cec-41473017db06.png)

### MovieStream_TargetのConnectionを作成
前提条件でMovieStreamというConnectionを作成済みですが、データ複製のターゲット用としてMovieStream_Targetを新たに作成します。

1. Create Connectionsを押して、下記画像のようにConnectionの作成を行います。
    * Name: MovieStream_Target
    * Use Credential File: ON
    * Services: 〇〇_low
    * User: QTEAM_TARGET
    * Password: 設定したパスワード

    Test Connectionを押し、接続テストに成功したら、作成ボタンを押します。


   ![qiita_DataTransforms_Replicate_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/12871a60-1d74-aebc-8095-b395e8ac22c8.png)

### QTEAMから、QTEAM_TARGETにデータを読み込む
1. Home画面に戻り、Load Dataを押します。すると以下の画像のように、Load Dataの情報を入力する画面が立ち上がってきます。
    * Name: MovieStream_dataLoad　(例)
    * Project Name: Replicate_Moviestream　を選択
    Nextを押します。
    ![qiita_DataTransforms_Replicate_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/cbb4a6d3-d760-6fe4-c234-e9c0ce292214.png)

1. Source Connectionを入力する画面に移ります。データ複製のためのソースとなるConnectionであるMovieStreamを選択します。スキーマはQTEAMにします。
    ![qiita_DataTransforms_Replicate_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/767bfffb-acf5-d858-8edb-05c506ac23bc.png)

    1. 続いてTarget Connectionを入力する画面に移ります。データの複製先のターゲットとなるConnectionであるMovieStream_Targetを選択します。スキーマはQTEAM_TARGETにします。
    ![qiita_DataTransforms_Replicate_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/acebf731-1391-6a5c-867b-e9498c2a1d33.png)
  
1. Home画面からProjectsを押し、先ほど作成したReplicate_MovoeStreamのProjectを選択します。
    ![qiita_DataTransforms_Replicate_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/09a7321e-279e-0b90-9db1-22bcb6b2a60a.png)

1. 画面左側のData Loadsを選択し、MovieStream_dataLoadが表示されているはずなので、このリンクを押します。
    ![qiita_DataTransforms_Replicate_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/2a300502-dc47-35e0-8a83-dd44ac68d839.png)
1. * MovieStream_dataLoadの詳細画面が表示されます。ソーススキーマのすべての表を見ることができ、該当の表(MOVIE_SALES_2020Q2)を選択します。
    * Recreate, Truncate, Append, Do not Loadの4つのアクション中から、行う作業を選択します。今回はデータの複製を行うので、Recreateを選びます。「保存されていない変更があります。」という注意が表示されたら、必要に応じてフロッピーディスクのアイコンをクリックし、作業の内容を保存してください。保存ができたら、緑色の三角印の実行ボタンを押してください。
    ![qiita_DataTransforms_Replicate_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/23a79520-6439-8347-6028-5168577be870.png)
 
### データが複製されたかを確認
1. Database Actionsの起動パッドに戻ります。この時点ではQTEAMユーザーでログインしているかと思います。ログアウトして、QTEAM_TARGETユーザーでログインし直します。
1. 起動パッドから、データカタログの項目を選択します。
    ![qiita_DataTransforms_Replicate_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/a3f16820-a95b-440f-00a0-13d223f51328.png)
    
1. しばらく待つと、以下のようにQTEAMスキーマから複製されたMOVIESALES_2020Q2の表の情報が表示されます。
    ![qiita_DataTransforms_Replicate_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/e8a9cb2f-feae-fb36-c321-3077620b9519.png)
# まとめ
本記事ではData Transformsを用いて、異なるスキーマ間においてデータを複製をさせてみました。


# 参考資料
* [OCIチュートリアル, Oracle Database編, 403 : Data Transformsを使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb403-data-transforms/)
* LiveLabs [Oracle Data Integrator Web Edition - Intro to Data Transforms](https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/run-workshop?p210_wid=832&p210_wec=&session=113561614505947)
* [Oracle Blogs, Introducing Data Transforms: Built in Data Integration for Autonomous Database](https://blogs.oracle.com/post/introducing-data-transforms-built-in-data-integration-for-autonomous-database)
* [Oracle Blogs, Replicating data from heterogenous sources to the Autonomous Database using the Data Transforms tool](https://blogs.oracle.com/datawarehousing/post/replicating-data-from-heterogenous-sources-to-the-autonomous-database-using-data-transforms)