6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle AI Data Platform から外部カタログ経由で Autonomous AI Database (ADW) に書き込む

Last updated at Posted at 2025-12-13

はじめに

この記事では、Oracle AI Data Platform(以下 AIDP)で「外部カタログ」を使い、Oracle Autonomous Database – Data Warehouse (ADW) にデータを書き込む方法を紹介します。以下をカバーします。

ADW 外部カタログの作成(ウォレットをBase64化して登録)
PySparkの insertInto を使った書き込み
SQL INSERT を使った書き込み
Spark での読み取り(wallet.path の指定例)

Oracle AI Data Platform とは

Oracle AI Data Platform(AIDP)は、Oracle Cloud Infrastructure 上でデータエンジニアリング、データサイエンス、生成AI活用を一体化して進められる統合ワークスペースです。主な特徴は次のとおりです。

  • 統合ワークスペース: ノートブック、ジョブ/ワークフロー、モデル実行、データ探索を一か所で実行
  • データ接続と外部カタログ: ADW をはじめとした外部データソースへの安全な接続をカタログとして管理し、Spark/SQL から一貫操作
  • 計算基盤: マネージド Spark クラスターでのスケーラブルなETL/ELT・分析・学習
    セキュリティ/ガバナンス: OCI IAM による認可、VCN/プライベート接続、ウォレット/シークレット管理(OCI Vault 等)や監査ログと整合
  • 運用性: パラメータ化、スケジューリング、再現性の高いパイプライン化、コスト/リソース管理
    本記事では、このうち「外部カタログ」を用いた ADW 連携(書き込み・読み取り)の基本手順にフォーカスします。資格情報やウォレットの取り扱いは、組織のセキュリティ/コンプライアンス方針に必ず従ってください。

前提条件

AIDP ワークスペースから到達できる ADW(プライベートの場合はプライベート接続対応のワークスペースを使用)
AIDP 環境の準備(コンピュートクラスターが起動済み)
ADW ウォレット(zip)をワークスペースにアップロード済み(Shareフォルダに配置)
ADW 上に書き込み先テーブルを作成済み(例)

ウォレットはShareフォルダの配下のサブフォルダに配置してください

スクリプト取り込み

マニュアルにAIDPのサンプルスクリプトがあるので、それをダウンロードして、zipを展開し、ワークスペースにアップロードします。
AIDP_Sample_Code.zip
当記事の対象のスクリプトは、[Access_ADW_Data.ipynb]です。ADBのウォレットも同じフォルダにアップロードしておきます。アップロードするフォルダは任意の場所でかまいません。

image.png

ADBスキーマ作成

ADW上にGOLDスキーマ(GOLDユーザ)を作成し、そのスキーマにpatient_dataテーブルを作成します。(下記DDL例)
image.png

CREATE TABLE gold.patient_data(
  "patient_id" VARCHAR2(30),
  "heart_rate_bpm" NUMBER,
  "blood_pressure" VARCHAR2(30),
  "oxygen_saturation" NUMBER,
  "room_number" VARCHAR2(30),
  "status" VARCHAR2(30)
);

1. ADBパラメータ設定

以降のPythonは、Access_ADW_Data.ipynbにサンプルがあるので、サンプルを修正しながらできます。
ADB接続に必要なパラメータをセットします。ユーザー名、パスワード、TNS、ウォレットパスは適宜変更してください。

# Define parameters (can set parameters in a workflow job)
user=oidlUtils.parameters.getParameter("USER", "ADMIN")
passwd=oidlUtils.parameters.getParameter("PASSWD", "Welcome12345#")
tns=oidlUtils.parameters.getParameter("TNS", "adw01_high")
wallet_passwd=oidlUtils.parameters.getParameter("WALLET_PASSWD", "Welcome12345#")
wallet_path=oidlUtils.parameters.getParameter("WALLET_PATH", "/Workspace/Shared/SampleCode/Getting_Started/Wallet_adw01.zip")
#End of parameters that need to be set, you can run the rest of the cells"

ウォレットパスは / からのフルパスで書いてください

2. 外部カタログの作成

ADWのWalletファイルをbase64でエンコードしてカタログを新規作成します。

import base64

byte_array=[]
try:
  with open(wallet_path, 'rb') as file:
    byte_array = bytearray(file.read())
except FileNotFoundError:
  print(f"Error: File not found: {wallet_path}")
except Exception as e:
  print(f"An error occurred: {e}")

wt = base64.b64encode(byte_array).decode('utf-8')
create_sql=f"create external catalog if not exists catalog_adw options ('wallet.content' = '{wt}', 'type' = 'ORACLE_ADW', 'user.name' = '{user}', 'tns' = '{tns}', 'password' = '{passwd}','wallet.password' = '{wallet_passwd}')"
spark.sql(create_sql).show(1000,False)

結果

+-------+
|status |
+-------+
|CREATED|
+-------+

3. PySparkでデータを書き込む

3-1. insertIntoによるデータ登録

df = spark.createDataFrame(
[
    ("P001", 72, "120/80", 98, "302A", "stable"),
    ("P002", 95, "145/95", 90, "215B", "critical")
],["patient_id", "heart_rate_bpm", "blood_pressure", "oxygen_saturation", "room_number", "status"])
df.write.insertInto("catalog_adw.gold.patient_data")

3-2. spark.sqlで登録確認

df=spark.sql("select * from catalog_adw.gold.patient_data")
df.show()

結果

+----------+--------------+--------------+-----------------+-----------+--------+
|patient_id|heart_rate_bpm|blood_pressure|oxygen_saturation|room_number|  status|
+----------+--------------+--------------+-----------------+-----------+--------+
|      P001| 72.0000000000|        120/80|    98.0000000000|       302A|  stable|
|      P002| 95.0000000000|        145/95|    90.0000000000|       215B|critical|
+----------+--------------+--------------+-----------------+-----------+--------+

3-3.Spark.read.tableで登録確認

# Read using Spark.read.table
df = spark.read.table("catalog_adw.gold.patient_data")
df.show()

結果

+----------+--------------+--------------+-----------------+-----------+--------+
|patient_id|heart_rate_bpm|blood_pressure|oxygen_saturation|room_number|  status|
+----------+--------------+--------------+-----------------+-----------+--------+
|      P001| 72.0000000000|        120/80|    98.0000000000|       302A|  stable|
|      P002| 95.0000000000|        145/95|    90.0000000000|       215B|critical|
+----------+--------------+--------------+-----------------+-----------+--------+

4. PySparkで一時テーブルからINSERT

4-1.PySparkで一時テーブル作成

# Let's create a dataframe to use for SQL INSERT into ADW
df = spark.createDataFrame(
[
    ("P003", 88, "125/95", 92, "215B", "critical")
],["patient_id", "heart_rate_bpm", "blood_pressure", "oxygen_saturation", "room_number", "status"])
df.createOrReplaceTempView("src_data")
spark.sql("select * from src_data").show()

結果

+----------+--------------+--------------+-----------------+-----------+--------+
|patient_id|heart_rate_bpm|blood_pressure|oxygen_saturation|room_number|  status|
+----------+--------------+--------------+-----------------+-----------+--------+
|      P003|            88|        125/95|               92|       215B|critical|
+----------+--------------+--------------+-----------------+-----------+--------+

4-2.一時テーブルをgold.patient_dataにINSERT

%sql
INSERT into catalog_adw.gold.patient_data select * from src_data

4-3.登録確認

# Read using Spark.read.table
df = spark.read.table("catalog_adw.gold.patient_data")
df.show()

結果

+----------+--------------+--------------+-----------------+-----------+--------+
|patient_id|heart_rate_bpm|blood_pressure|oxygen_saturation|room_number|  status|
+----------+--------------+--------------+-----------------+-----------+--------+
|      P001| 72.0000000000|        120/80|    98.0000000000|       302A|  stable|
|      P002| 95.0000000000|        145/95|    90.0000000000|       215B|critical|
|      P003|            88|        125/95|               92|       215B|critical|
+----------+--------------+--------------+-----------------+-----------+--------+

参考リンク

Oracle AI Data Platformマニュアル

おわりに

これでOracle AI Data PlatformからADWへのデータロードや、Walletの扱い方が理解できたと思います。セキュリティやネットワーク要件を充分確認したうえでご活用ください。

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?