[Autonomous Database] Data TransformsからData StudioのData Loadを呼び出す

# はじめに
5月のアップデートでData TransformsからData StudioのData Loadをワークフローから呼び出すことがサポートされました。どのようなものかData Transformsのチュートリアルをベースにして試してみたいと思います。

# 前提
* [OCIチュートリアルのData Transformsのチュートリアル](https://oracle-japan.github.io/ocitutorials/adb/adb403-data-transforms/)を実施済みであること
* 2025/5月半ばでの検証内容であること。（今後のアップデートで変わる可能性があります）

# Data StudioでData Loadを作成
チュートリアルではローカルのPCにMovie_Sales_2020.csvファイルをダウンロードして、Autonomous Databaseにロードしていますが、ここではObject Storage上にある同じファイルをData Studioでロードするデータ・ロードを作成します。

Database ActionsにQTEAMユーザでログインし、Data Stduio→データ・ロード→クラウド・ストアを選択し、URLに以下を入力します。
https://objectstorage.ap-tokyo-1.oraclecloud.com/n/dwcsprod/b/MovieStream/o/Movie_Sales_2020.csv

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/a2fa3085-37a1-4696-bb8d-6afa8b97fc63.png)

表示されるMovie_Sales_2020.csvを右にドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b4762481-0630-4f61-8bcc-7746a634be6d.png)

チュートリアルを実施済みにより、ロード先の表が既にあるので、”表の作成”ではなく"データの置換"でロードします。右下のえんぴつアイコン（設定）をクリックし、オプションで"データの置換"を選択し、閉じるをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c29b2ea3-dd60-4c0d-8713-65fe3bcdb35e.png)


ファイル名の下にある表示が”データの置換”に変わったことを確認し、開始をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/ed3f27fa-5b54-4f05-bdb5-daa3a7b988de.png)

確認に対して実行を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/85981349-cdc6-4cf7-979e-d2651f804f1d.png)

ロードが完了したことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2d048fe1-a0a9-4ebe-893e-3371ab094971.png)



# データ変換でワークフローを作成
## 作成済みのデータフローを編集する
QTEAMユーザーでデータ変換にアクセスします。チュートリアルを実行済みなので以下のようにデータ・フローMoviestream_Q2FY2020が作成ずみのはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b6ae4ff7-9cee-4ed3-a511-bba9c4a70124.png)

フローの最後であるMOVIE_SALES_2020Q2のオプションで以下のオプションを変更して、保存しておきます。

+ Create target table : TrueからFalseに変更
+ Trancate Target table : FalseからTrueに変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/3988e2e2-3108-47eb-bc8d-107168d16e8f.png)

## ワークフローを作成、実行する
同じMovieStreamプロジェクトでワークフローを作成します。左のResourcesからWorkflowsを選択し、Create Workflowをクリックします。名前をMoviestream_Q2FY2020_WFとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2565b957-0b92-417d-afaf-c05f0a4a51b0.png)

Data Studio Loadがワークフローに選択できるようになっています。キャンバスにドラッグアンドドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f089af0c-3b28-4437-aaa3-2d60c8adad4c.png)

オプションで設定を行います。名前をMovie_Sales_2020_loadとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/3301abd9-71fa-4ac3-83a0-e9d8fda185f3.png)

Attributesを選択し、ConnectionにMovieStream、Data Studio Loadには自動で表示されるMOVIE_SALES_2020_LOAD_xxxを選択します。

::: note warn
ローカル・ファイルからのアップロードのデータ・ロードは選択リストに表示されませんでした。対象にできないようです。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/209e217d-0d86-4b4f-98be-cd2def6aa189.png)


Data Studio Loadが成功したらMoviestream_Q2FY2020が実行されるよう以下のようにフローを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/9bc55d22-1e0e-4c23-8c74-94d3141978e9.png)

保存して実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0b50047a-e029-46a0-91e9-16eb807d4b58.png)

正常に終了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/45dcb700-8a09-45f8-94f8-8754fd3421bb.png)

# 確認してみた
## どのように実行されているのか？

Data Transformsで実行したワークフローのジョブの詳細を確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/db529df3-fd86-4653-b9ad-bf9d39c48213.png)

Data Studio JobはDBMS_INGEST.REPLAY_MANIFESTというプロシージャに引数が与えられて実行しているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/00a448f6-031e-4aee-9c9f-84a908128691.png)

一方、Data Studioのデータ・ロードのホームを確認してみると、”表を削除して新規表を作成”でロードの実行がされていました。事前に実行したのは、データの置換だったのですが、Data Transformsから実行すると自動的に再作成になったようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f948ffe9-e150-43e0-a996-bf9b502a2bea.png)

試行錯誤したところ、データ・ロードのジョブの情報はQTEAMユーザーでこちらのSQLで確認できました。

``` sql
select job_entity_id,job_name,created,updated from user_ingest_Jobs where job_name like 'MOVIE%' order by created desc;

JOB_ENTITY_ID JOB_NAME                  CREATED                     UPDATED                     
------------- ------------------------- --------------------------- --------------------------- 
          733 MOVIE_SALES_2020_LOAD_733 2025-05-19T03:04:08.78606Z  2025-05-19T03:04:10.270918Z 
          731 MOVIE_SALES_2020_LOAD_731 2025-05-19T02:28:55.507726Z 2025-05-19T02:28:56.336769Z 
          709 MOVIE_SALES_2020_LOAD_709 2025-05-16T02:14:11.858655Z 2025-05-16T02:14:12.866666Z 
          695 MOVIE_SALES_2020_LOAD_695 2025-05-16T00:41:32.880898Z 2025-05-16T00:41:33.69972Z 
``` 

時系列で考えるとJOB_ENTITY_IDが709,695はこの記事では行っていない過去に行ったローカルファイルからのロード、731が今回のData Stduioでのデータ置換でのロードでData Transformsから呼び出すときに指定されたもの、そして733がData Transformsから呼び出された実行と考えられます。念のため、もう1度Data Transformsからワークフローを実行してみて確認します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b2737e34-a2ca-43e3-87dc-30cfbcc168fa.png)

ワークフロー開始の確認でOKをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/e801ebd6-e1a7-48e2-9eea-b44ba0ae35fb.png)

実行中ですが、Data Transformsのジョブの確認をしてみました。プロシージャは変わってません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2e00d2c8-943c-4d65-a77b-207b59e476a6.png)

先のSQLを実行してみるとJOB＿ENTITY_IDが735のジョブが作成されていました。

``` sql
JOB_ENTITY_ID JOB_NAME                  CREATED                     UPDATED                     
------------- ------------------------- --------------------------- --------------------------- 
          735 MOVIE_SALES_2020_LOAD_735 2025-05-19T04:34:19.988842Z 2025-05-19T04:34:20.369847Z 
          733 MOVIE_SALES_2020_LOAD_733 2025-05-19T03:04:08.78606Z  2025-05-19T03:04:10.270918Z 
          731 MOVIE_SALES_2020_LOAD_731 2025-05-19T02:28:55.507726Z 2025-05-19T02:28:56.336769Z 
          709 MOVIE_SALES_2020_LOAD_709 2025-05-16T02:14:11.858655Z 2025-05-16T02:14:12.866666Z 
          695 MOVIE_SALES_2020_LOAD_695 2025-05-16T00:41:32.880898Z 2025-05-16T00:41:33.69972Z  
```

またData Stdioのデータ・ロードのホームでは"表を削除して新規表を作成"でロードが行われていました。735のジョブと考えられます。やはりData Transformsからの呼び出しは表の再作成でジョブが実行される動作のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b9bb0d26-299c-4e20-bce3-7ac5c21600c4.png)

## Data Transformsが表示するデータ・ロードのリストは？
同じ表MOVIE_SALES_2020に対するデータ・ロードのJOB_ENTITY_IDが複数ある状態で、Data_TransormsからData Studioのロードを呼びだすときに自動で表示されるデータ・ロードのリストはどうなるのでしょうか。
ワークフローを2回実行しているので、先のSQL結果のとおりJOB_ENTITY_JOBは複数あるのですが、Data Transformsで見てみたところ、最初と変わらず、表示は731の1つだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2e257e5e-e148-4d6b-979e-1500187f05da.png)

同じ表でデータ・ロードの内容が変わった場合はどうなるのでしょうか。特定の列を指定したデータ・ロードにした場合で試してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/556701aa-538f-4c6a-a8eb-f796af707798.png)

実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/97c6778f-9c30-445b-8b47-d5440e1a5fef.png)

SQLの結果はこちらのとおり737が新しく存在します。

``` sql
JOB_ENTITY_ID JOB_NAME                  CREATED                     UPDATED                     
------------- ------------------------- --------------------------- --------------------------- 
          737 MOVIE_SALES_2020_LOAD_737 2025-05-19T04:48:49.049687Z 2025-05-19T04:48:49.313406Z 
          735 MOVIE_SALES_2020_LOAD_735 2025-05-19T04:34:19.988842Z 2025-05-19T04:34:20.369847Z 
          733 MOVIE_SALES_2020_LOAD_733 2025-05-19T03:04:08.78606Z  2025-05-19T03:04:10.270918Z 
          731 MOVIE_SALES_2020_LOAD_731 2025-05-19T02:28:55.507726Z 2025-05-19T02:28:56.336769Z 
          709 MOVIE_SALES_2020_LOAD_709 2025-05-16T02:14:11.858655Z 2025-05-16T02:14:12.866666Z 
          695 MOVIE_SALES_2020_LOAD_695 2025-05-16T00:41:32.880898Z 2025-05-16T00:41:33.69972Z 

```

この状態でData Transformsで確認すると、2行で表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/a9c141e5-2056-4c4e-9e21-233b3b3df9c4.png)

結果からみると、内容が異なるデータ・ロードは区別がされるようですが、どのロードがどのような内容なのかをどこで確認するのか？というのはUIで確認できないのがつらいところです。

# おわりに
Data Transformsに新しく追加されたData Studioのデータ・ロードを呼び出す機能を試してみました。
データ変換でサポートされていないTXTファイルやJSONファイルなどのファイル形式からAutonomous Databaseへデータをロードし、そのまま変換作業を行いたい！というときに便利かもしれません。
ただ、まだこなれていないので想定の動作になるかはきちんと検証しながら使う必要がありそうです。

# 参考
[Define a Data Studio Data Load in a Work Flow](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/work-with-workflows.html#GUID-B4024802-72AC-457C-A4D2-BAB85F70CF36)



<!--
ローカル・ファイルのデータ・ロードは表示されませんでしたが、他のケースはどうなのでしょう？
データベース・リンクでクラウド・リンクの場合は対象になるようだ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/3d7805f8-d67a-4969-90d4-4a0da0db9f45.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/827446a4-0f8a-4681-9035-eb27319a48a2.png)

-->