5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Autonomous AI Database] Google Cloud Storage(GCS)へData Transformsでデータを変換して出力してみる

Last updated at Posted at 2026-01-22

はじめに

Autonomous AI Database(ADB)に付属するETLツールであるData Transformsはさまざまなデータソースをサポートしています。そのなかでは読取りはOKですが、書き込みはNGというものもいくつかあります。その1つがGoogle Cloud Storage(GCS)です。一方でAutonomous AI DatabaseはDBMS_CLOUD.EXPORT_DATAを利用してクラウド・ストレージへの出力が可能です。
Data Transformsで変換まで行ってDBMS_CLOUD.EXPORT_DATAで出力を行えないか試してみました。

前提

  • Autonomous AI Database 19c(ADB)をプライベート・エンドポイントで作成済み
  • Base Database 19c(BaseDB)cのインスタンスをADBと同じVCNのプライベート・エンドポイントで作成し、プラガブルデータベースを作成済み
  • GCSのバケットを用意

1.検証用のユーザーを作成

BaseDBとADBにTESTUSERというユーザーを作成します。Base DBにはテスト表も作成します。

BaseDBで実行

次のスクリプトを実行します

BaseDB実行スクリプト
connect system/password
CREATE USER TESTUSER IDENTIFIED BY "Welcome12345#";

-- ADD ROLES
GRANT CONNECT TO TESTUSER;
GRANT RESOURCE TO TESTUSER;

-- 顧客テーブル
CREATE TABLE testuser.customers (
  customer_id NUMBER PRIMARY KEY,
  customer_name VARCHAR2(100),
  address VARCHAR2(200)
);

INSERT INTO testuser.customers VALUES (1, '田中 太郎', '東京都品川区');
INSERT INTO testuser.customers VALUES (2, '鈴木 花子', '大阪府大阪市');
INSERT INTO testuser.customers VALUES (3, '佐藤 次郎', '東京都杉並区');
INSERT INTO testuser.customers VALUES (4, '高橋 美咲', '東京都新宿区');
INSERT INTO testuser.customers VALUES (5, '伊藤 健', '神奈川県横浜市');
INSERT INTO testuser.customers VALUES (6, '中村 亮', '東京都世田谷区');
INSERT INTO testuser.customers VALUES (7, '小林 渚', '千葉県千葉市');
INSERT INTO testuser.customers VALUES (8, '加藤 翔', '東京都渋谷区');
INSERT INTO testuser.customers VALUES (9, '吉田 麻衣', '東京都中野区');
INSERT INTO testuser.customers VALUES (10, '山本 一郎', '埼玉県さいたま市');

-- 取引テーブル
CREATE TABLE testuser.transactions (
  transaction_id NUMBER PRIMARY KEY,
  customer_id NUMBER,
  amount NUMBER,  
  transaction_date DATE,
  FOREIGN KEY (customer_id) REFERENCES testuser.customers(customer_id)
);

INSERT INTO testuser.transactions VALUES (1001, 1, 8000, TO_DATE('2024-06-01','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1002, 2, 3000, TO_DATE('2024-06-02','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1003, 3, 12000, TO_DATE('2024-06-05','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1004, 4, 6000, TO_DATE('2024-06-06','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1005, 5, 4500, TO_DATE('2024-06-07','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1006, 6, 5200, TO_DATE('2024-06-08','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1007, 7, 9500, TO_DATE('2024-06-08','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1008, 8, 11000, TO_DATE('2024-06-09','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1009, 9, 7000, TO_DATE('2024-06-10','YYYY-MM-DD'));
INSERT INTO testuser.transactions VALUES (1010, 10, 2000, TO_DATE('2024-06-10','YYYY-MM-DD'));

ADBで実行

ユーザーTESTUSERを作成します

CREATE USER TESTUSER IDENTIFIED BY "Welcome12345#";

-- ADD ROLES
GRANT CONNECT TO TESTUSER;
GRANT DWROLE TO TESTUSER;
GRANT RESOURCE TO TESTUSER;
ALTER USER TESTUSER DEFAULT ROLE DWROLE;

2.ADBからGCSへアクセスできるようにする

以下の記事を参照してにADBからCGSへアクセスできるように設定を行いました。
[OCI]GCPのサービスアカウントを使用してAutonomous DatabaseからGoogle Cloud Storageにアクセスしてデータ連携してみた

設定した結果を記載しておきます。

2-1. Autonomous DatabaseでGCPのサービスアカウントを有効化

有効化のコマンドを実行し

BEGIN
     DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
     provider => 'GCP' );
END;
/

サービスアカウントを確認しました。

SELECT * FROM cloud_integrations WHERE param_name = 'gcp_service_account';
PARAM_NAME          PARAM_VALUE                                               
------------------- --------------------------------------------------------- 
gcp_service_account GCP-SA-3010-62179@gcp-pa-project1.iam.gserviceaccount.com 

2-1. Google Cloudのロールの作成

記事の手順に従ってロールを作成しました。

image.png

2-3. Google Cloud Storageの準備

記事の手順に従ってGCSの準備をしました。

image.png

3.ADBからGCSへの書き込みができることを確認する

DBMS_CLOUDパッケージのEXPORT_DATAはドキュメントにあるとおり、クラウドストレージへの書き込みが可能です。

Googleサービスアカウントを利用する場合、クレデンシャルにはGCP$PAを指定します。
また、file_uri_listには、以下のような仮想ホスト形式でバケットと出力ファイル名を指定します。
https://バケット名.storage.googleapis.com/ファイル名

ADMINユーザーで次を実行します。

BEGIN
  DBMS_CLOUD.EXPORT_DATA(
    credential_name => 'GCP$PA',
    file_uri_list   => 'https://gcp-cloud-storage-bucket-adb.storage.googleapis.com/test1.csv',
    query           => 'SELECT 1,systimestamp FROM dual',
    format          => JSON_OBJECT('type' value 'csv'));
END;
/

GCSのバケットを確認すると、ファイルが出力されていることを確認できました。(ファイル名には識別子が付きます。)

image.png

4.Data Transformsでデータの接続を作成する

以下の記事を参照して。Data Transformsを起動し、ADB、BaseDBの接続を作成します。

[Autonomous Database]Data Transformsでプライベート・エンドポイントのBase Databaseにアクセスしてみる

今回は同じVCN上のプライベートエンドポイントを利用しているので、「VCNのローカルピアリング」の項目は不要です。次の項目を実施します。

  • プライベート・エンドポイントアクセスのための設定
  • Data Transformsで接続の作成

5.Data Transformsでデータ・フローを作成する

チュートリアルを参考にして以下の条件を満たすデータ・フローを作成しました。

  • 2つのテーブルをcustomer_idで結合(Join)
  • 取引金額が5000円以上の明細を抽出(Filter)
  • 取引金額から手数料(例: 3%)を差し引いた純利益を計算(Expression)
  • 住所に含まれる"東京都"を"TOKYO"に置換(Replace)
  • 出力先としてADBにcustomer_transactions_tableを新規に作成(存在する場合は削除して再作成)

■ 作成したデータフロー

image.png

■ Join(結合)の設定
image.png

■ Filterの設定
image.png

■ Expressionの設定
新しい属性"NET_INCOME"を追加し、手数料を引いた値(*0.97)になるよう定義します。
image.png

image.png

image.png

■ Replaceの設定
ADDRESS属性で文字列'東京都'を'TOKYO'に変更するよう指定します。
image.png

■ 新規に作成する表の設定
ADDRESSとマッピングする属性はREPLACEのRETURNに指定します。
image.png

オプションで"Drop and create target table"をTrueに変更します。
image.png

データフローが作成できたので実行してみます。

image.png

右下のステータスが完了になれば成功です。
image.png

ADBに接続して、SQLでCUSTOMER_TRANSACTIONS_TABLEを確認します。条件にあったデータが出力されています。

select * from TESTUSER.CUSTOMER_TRANSACTIONS_TABLE ;
CUSTOMER_ID TRANSACTION_ID CUSTOMER_NAME ADDRESS   AMOUNT TRANSACTION_DATE  NET_INCOME 
----------- -------------- ------------- --------- ------ ----------------- ---------- 
          1           1001 田中 太郎         TOKYO品川区    8000 2024/6/1 0:00:00        7760 
          3           1003 佐藤 次郎         TOKYO杉並区   12000 2024/6/5 0:00:00       11640 
          4           1004 高橋 美咲         TOKYO新宿区    6000 2024/6/6 0:00:00        5820 
          6           1006 中村 亮          TOKYO世田谷区   5200 2024/6/8 0:00:00        5044 
          7           1007 小林 渚          千葉県千葉市      9500 2024/6/8 0:00:00        9215 
          8           1008 加藤 翔          TOKYO渋谷区   11000 2024/6/9 0:00:00       10670 
          9           1009 吉田 麻衣         TOKYO中野区    7000 2024/6/10 0:00:00       6790 


Elapsed: 00:00:00.042
7行が選択されました。

6.Data Transformsでワークフローを作成する

データフローで出力された結果をGCSに出力するため、データフローの後にPL/SQLでDBMS_CLOUD.EXPORT_DATAを実行するようワークフローを作成します。ワークフローでは作成済みのデータフローやワークフロー等のコンポーネントのほか、スリープやSQLを組み込めます。

image.png

SQLで接続先をADB、そして3で確認したPL/SQLコードのQueryを以下のSQLに、出力ファイル名をtest1.csvからcustomer_transactions.csvに変更したコードを記述します。
select * from testuser.customer_transactions_table

image.png

保存した後ワークフローを開始して実行結果を確認します。
image.png

データフローと同じように右下のステータスが完了になれば成功です。
image.png

GCSのバケットを確認します。customer_transactions_識別子.csvというファイルが出力されました。

image.png

ダウンロードして内容を確認すると、正しくデータが出力されていました。

image.png

おわりに

Data TransformsとDBMS_CLOUDパッケージを利用してBaseDBのデータをADB経由でGCSへ出力することができました。ADBは今回ステージング的な役割でしたが、そのままSelect AIやAI Agentを利用して、データ活用するなんてこともよいのでは?!と思いました。

参考資料

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?