🗄️aidp-oracle-db
- ソース
- GitHub で見る ↗
説明
Oracle Database(Compute / Base DB / オンプレミス / Oracle 19c・21c・23ai・26ai 非Autonomous版)を、AIDPの `aidataplatform` Spark フォーマットハンドラー経由でAIDPノートブックから読み書きします。 次のような場合に使用: ユーザーがOracle Database、汎用Oracle DB、オンプレミスOracle、通常のOracle JDBC、ポート1521、非AutononomousのOracleについて言及している場合。 読み書き両対応。 認証はホスト/ポート + データベース名 + ユーザー名/パスワードで行います。
原文を表示
Read or write an Oracle Database (Compute / Base DB / on-prem / Oracle 19c, 21c, 23ai, 26ai non-Autonomous) from an AIDP notebook via the AIDP `aidataplatform` Spark format handler. Use when the user mentions Oracle Database, generic Oracle DB, on-prem Oracle, plain Oracle JDBC, port 1521, non-Autonomous Oracle. Read-write. Auth is host/port + database name + user/password.
ユースケース
- ✓Oracle Databaseから大容量データを読み込むとき
- ✓AIDPノートブックでOracle DBのデータを処理するとき
- ✓処理結果をOracle Databaseに書き込むとき
- ✓オンプレミスOracleに接続するとき
本文(日本語訳)
aidp-oracle-db — AIDP aidataplatform 経由の汎用 Oracle Database
Autonomous でない Oracle DB(Oracle on Compute、Base DB、オンプレミス、顧客管理の Oracle 19c/21c/23ai/26ai)向けです。 認証は TCP 1521 上のシンプルなユーザー名/パスワード方式です。
次のような場合に使用
- AIDP ノートブックから Autonomous でない Oracle Database の読み書きを行いたい場合。
- ユーザーが次のキーワードを挙げている場合:「Oracle Database」「汎用 Oracle DB」「オンプレミス Oracle」「Oracle 19c」「Oracle 21c」「Autonomous でない Oracle 23ai」「Base DB」「Oracle on Compute」
- ホスト/ポート + シンプルなユーザー名/パスワードがある場合(ウォレット不要、IAM DB-Token 不要)。
次のような場合は使用しない
- Autonomous DB ファミリー(ALH/ADW/ATP)の場合 →
aidp-alhを使用してください。 Autonomous は常に TCPS + ウォレット(または IAM DB-Token)を使用するため、aidp-oracle-dbは動作しません。 - Exadata Cloud Service の場合 →
aidp-exacsを使用してください。 ExaCS には固有の NNE パターンがあります。 - PeopleSoft / Siebel の場合 — これらは Oracle DB 上で動作しますが、適切なスキーマデフォルトを持つ専用 skill が別途存在します。
AIDP ノートブックの前提条件
sys.path上にヘルパーが存在すること(事前にaidp-connectors-bootstrapを実行してください)。- ネットワーク: クラスターがリスナーポート(通常 1521)で Oracle DB ホストに到達できること。 顧客 VCN 内のプライベート DB の場合は、VCN ピアリングが必要です。
- 環境変数 / OCI Vault シークレット:
ORADB_HOST、ORADB_PORT(通常1521)ORADB_DATABASE_NAME(Oracle サービス名)またはORADB_DATABASE_SIDORADB_USER、ORADB_PASSWORDORADB_SCHEMA、ORADB_TABLE
読み取り(インラインオプション)
import os
from oracle_ai_data_platform_connectors.aidataplatform import (
AIDP_FORMAT, aidataplatform_options,
)
opts = aidataplatform_options(
type="ORACLE_DB",
host=os.environ["ORADB_HOST"],
port=int(os.environ.get("ORADB_PORT", "1521")),
database_name=os.environ["ORADB_DATABASE_NAME"],
user=os.environ["ORADB_USER"],
password=os.environ["ORADB_PASSWORD"],
schema=os.environ["ORADB_SCHEMA"],
table=os.environ["ORADB_TABLE"],
extra={
# オプション(公式コネクターオプション):
# "database.sid": os.environ["ORADB_DATABASE_SID"],
# "row.limit": "1000",
# "fetch.size": "10000",
# "partition.column": "ID",
# "partition.num": "8",
# "partition.lower": "1",
# "partition.upper": "1000000",
},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show(10)
書き込み(インラインオプション)
opts = aidataplatform_options(
type="ORACLE_DB",
host=os.environ["ORADB_HOST"],
port=int(os.environ.get("ORADB_PORT", "1521")),
database_name=os.environ["ORADB_DATABASE_NAME"],
user=os.environ["ORADB_USER"],
password=os.environ["ORADB_PASSWORD"],
schema=os.environ["ORADB_SCHEMA"],
table=os.environ["ORADB_TARGET_TABLE"],
extra={
"write.mode": "APPEND", # CREATE | APPEND | OVERWRITE | MERGE
# "write.merge.keys": "ID",
# "write.batch.size": "10000",
# "write.empty.value.as.null": "true",
# "preserve.oracle.column.types": "EMBEDDING VECTOR(512, FLOAT32), DOC JSON",
# "oracle.write.native.boolean": "true",
# "oracle.append.hint.enabled": "true",
},
)
df.write.format(AIDP_FORMAT).options(**opts).save()
既存の外部カタログ経由での読み取り(catalog.id)
AIDP ワークスペースに Oracle DB が外部カタログとして登録済みの場合は、 ホスト/ポート/認証情報をすべて省略し、カタログ ID で参照できます:
opts = aidataplatform_options(
type="ORACLE_DB",
schema=os.environ["ORADB_SCHEMA"],
table=os.environ["ORADB_TABLE"],
extra={"catalog.id": os.environ["ORADB_CATALOG_ID"]},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show(10)
または spark.table() による3パート名前付けも利用できます:
df = spark.table(f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TABLE']}")
df.show(10)
df.write.mode("overwrite").saveAsTable(
f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TARGET_TABLE']}"
)
プッシュダウン SQL
opts = aidataplatform_options(
type="ORACLE_DB",
host=os.environ["ORADB_HOST"],
port=int(os.environ.get("ORADB_PORT", "1521")),
database_name=os.environ["ORADB_DATABASE_NAME"],
user=os.environ["ORADB_USER"],
password=os.environ["ORADB_PASSWORD"],
extra={
"pushdown.sql": (
"SELECT department_id, COUNT(*) AS headcount, SUM(salary) AS total "
"FROM HR.EMPLOYEES "
"WHERE hire_date >= DATE '2024-01-01' "
"GROUP BY department_id"
),
},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show()
外部カタログのプッシュダウン
df = spark.read.table(
f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TABLE']}"
)
df.select("DEPARTMENT_ID", "SALARY").filter("DEPARTMENT_ID = 10").limit(100).show()
df.write.option("write.mode", "MERGE").option("write.merge.keys", "EMPLOYEE_ID").insertInto(
f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TARGET_TABLE']}"
)
注意事項
database.nameは Oracle サービス名、database.sidは SID です。 どちらも公式サンプルのオプションテーブルでサポートされています。schemaと混同しないよう注意してください。- AIDP コネクターには Oracle DB 向けのウォレットオプションも存在します(
wallet.content、wallet.path、wallet.password)が、シンプルなユーザー名/パスワードがデフォルトのサンプルパスです。 Autonomous DB の場合はaidp-alhを使用してください。 - ネットワーク到達性が最も多い障害原因です。
クラスターからの疎通確認:
socket.create_connection((host, 1521), timeout=8)。 失敗した場合はネットワークの問題(NSG / ルートテーブル / DNS)であり、認証の問題ではありません。 - 書き込みモード —
CREATE、APPEND、OVERWRITE、MERGEがあります。MERGEを使用する場合はwrite.merge.keysを指定してください。 - Oracle 書き込みオプション — サンプルでは
preserve.oracle.column.types、oracle.write.native.boolean、oracle.append.hint.enabled、overwrite.with.recreate、マージフィルターが公開されています。 ユーザーがベクター、JSON、boolean、追記パフォーマンス、アップサートについて質問した場合にこれらを提示してください。 - NLS 設定 — デフォルトの Oracle 日付はタイムゾーンの予期しない挙動を引き起こすことがあります。
タイムゾーンのずれが発生した場合は
extra={"oracle.jdbc.timezoneAsRegion": "false"}を設定してください。
参考資料
原文(English)を表示
aidp-oracle-db — Generic Oracle Database via AIDP aidataplatform
For non-Autonomous Oracle DBs — Oracle on Compute, Base DB, on-prem, customer-managed Oracle 19c/21c/23ai/26ai. Auth is plain user/password over TCP 1521.
When to use
- User wants to read or write a non-Autonomous Oracle Database from an AIDP notebook.
- User mentions: "Oracle Database", "generic Oracle DB", "on-prem Oracle", "Oracle 19c", "Oracle 21c", "Oracle 23ai non-Autonomous", "Base DB", "Oracle on Compute".
- User has a host/port + plain user/password (no wallet, no IAM DB-Token).
When NOT to use
- For Autonomous DB family (ALH/ADW/ATP) →
aidp-alh. Autonomous always uses TCPS + wallet (or IAM DB-Token) —aidp-oracle-dbwon't work. - For Exadata Cloud Service →
aidp-exacs. ExaCS has its own NNE pattern. - For PeopleSoft / Siebel — those run on Oracle DB but have their own dedicated skills with the right schema defaults.
Prerequisites in the AIDP notebook
- Helpers on
sys.path(runaidp-connectors-bootstrapfirst). - Network: cluster must reach the Oracle DB host on the listener port (typically 1521). For private DBs in customer VCNs, VCN peering is required.
- Env vars / OCI Vault secrets:
ORADB_HOST,ORADB_PORT(typically1521)ORADB_DATABASE_NAME(Oracle service name) orORADB_DATABASE_SIDORADB_USER,ORADB_PASSWORDORADB_SCHEMA,ORADB_TABLE
Read (inline options)
import os
from oracle_ai_data_platform_connectors.aidataplatform import (
AIDP_FORMAT, aidataplatform_options,
)
opts = aidataplatform_options(
type="ORACLE_DB",
host=os.environ["ORADB_HOST"],
port=int(os.environ.get("ORADB_PORT", "1521")),
database_name=os.environ["ORADB_DATABASE_NAME"],
user=os.environ["ORADB_USER"],
password=os.environ["ORADB_PASSWORD"],
schema=os.environ["ORADB_SCHEMA"],
table=os.environ["ORADB_TABLE"],
extra={
# Optional official connector options:
# "database.sid": os.environ["ORADB_DATABASE_SID"],
# "row.limit": "1000",
# "fetch.size": "10000",
# "partition.column": "ID",
# "partition.num": "8",
# "partition.lower": "1",
# "partition.upper": "1000000",
},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show(10)
Write (inline options)
opts = aidataplatform_options(
type="ORACLE_DB",
host=os.environ["ORADB_HOST"],
port=int(os.environ.get("ORADB_PORT", "1521")),
database_name=os.environ["ORADB_DATABASE_NAME"],
user=os.environ["ORADB_USER"],
password=os.environ["ORADB_PASSWORD"],
schema=os.environ["ORADB_SCHEMA"],
table=os.environ["ORADB_TARGET_TABLE"],
extra={
"write.mode": "APPEND", # CREATE | APPEND | OVERWRITE | MERGE
# "write.merge.keys": "ID",
# "write.batch.size": "10000",
# "write.empty.value.as.null": "true",
# "preserve.oracle.column.types": "EMBEDDING VECTOR(512, FLOAT32), DOC JSON",
# "oracle.write.native.boolean": "true",
# "oracle.append.hint.enabled": "true",
},
)
df.write.format(AIDP_FORMAT).options(**opts).save()
Read via existing external catalog (catalog.id)
If your AIDP workspace already has the Oracle DB registered as an external catalog, drop the host/port/credentials entirely and reference the catalog by id:
opts = aidataplatform_options(
type="ORACLE_DB",
schema=os.environ["ORADB_SCHEMA"],
table=os.environ["ORADB_TABLE"],
extra={"catalog.id": os.environ["ORADB_CATALOG_ID"]},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show(10)
Or use three-part naming via spark.table():
df = spark.table(f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TABLE']}")
df.show(10)
df.write.mode("overwrite").saveAsTable(
f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TARGET_TABLE']}"
)
Pushdown SQL
opts = aidataplatform_options(
type="ORACLE_DB",
host=os.environ["ORADB_HOST"],
port=int(os.environ.get("ORADB_PORT", "1521")),
database_name=os.environ["ORADB_DATABASE_NAME"],
user=os.environ["ORADB_USER"],
password=os.environ["ORADB_PASSWORD"],
extra={
"pushdown.sql": (
"SELECT department_id, COUNT(*) AS headcount, SUM(salary) AS total "
"FROM HR.EMPLOYEES "
"WHERE hire_date >= DATE '2024-01-01' "
"GROUP BY department_id"
),
},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show()
External catalog pushdown
df = spark.read.table(
f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TABLE']}"
)
df.select("DEPARTMENT_ID", "SALARY").filter("DEPARTMENT_ID = 10").limit(100).show()
df.write.option("write.mode", "MERGE").option("write.merge.keys", "EMPLOYEE_ID").insertInto(
f"{os.environ['ORADB_CATALOG_ID']}.{os.environ['ORADB_SCHEMA']}.{os.environ['ORADB_TARGET_TABLE']}"
)
Gotchas
database.nameis the Oracle service name;database.sidis the SID. Both are supported by the official sample option table; don't confuse either withschema.- Wallet options exist for Oracle DB in the AIDP connector (
wallet.content,wallet.path,wallet.password), but plain user/password is the default sample path. For Autonomous DB, useaidp-alh. - Network reachability is the most common failure. From the cluster:
socket.create_connection((host, 1521), timeout=8). Failure = network problem (NSG / route table / DNS), not auth. - Write modes —
CREATE,APPEND,OVERWRITE, andMERGE. ForMERGE, passwrite.merge.keys. - Oracle write controls — the sample exposes
preserve.oracle.column.types,oracle.write.native.boolean,oracle.append.hint.enabled,overwrite.with.recreate, and merge filters. Surface these when the user asks about vectors, JSON, booleans, append performance, or upserts. - NLS settings. Default Oracle dates can come back with timezone surprises. Set
extra={"oracle.jdbc.timezoneAsRegion": "false"}if you see TZ drift.
References
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。