Oracle データベース(Compute / Base DB / オンプレミス / Oracle 19c、21c、23ai、26ai の非自律型)への読み書きを、AIDP ノートブックから AIDP の `aidataplatform` Spark フォーマットハンドラ経由で実行できます。 **次のような場合に使用:** - ユーザーが Oracle Database、一般的な Oracle DB、オンプレミス Oracle、標準的な Oracle JDBC、ポート 1521、非自律型 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.
aidp-oracle-db — AIDP aidataplatform 経由の汎用 Oracle DatabaseAutonomous でない Oracle DB(Oracle on Compute、Base DB、オンプレミス、顧客管理の Oracle 19c/21c/23ai/26ai)向けです。 認証は TCP 1521 上のシンプルなユーザー名/パスワード方式です。
aidp-alh を使用してください。
Autonomous は常に TCPS + ウォレット(または IAM DB-Token)を使用するため、aidp-oracle-db は動作しません。aidp-exacs を使用してください。
ExaCS には固有の NNE パターンがあります。sys.path 上にヘルパーが存在すること(事前に aidp-connectors-bootstrap を実行してください)。ORADB_HOST、ORADB_PORT(通常 1521)ORADB_DATABASE_NAME(Oracle サービス名)または ORADB_DATABASE_SIDORADB_USER、ORADB_PASSWORDORADB_SCHEMA、ORADB_TABLEimport 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']}"
)
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 と混同しないよう注意してください。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 を指定してください。preserve.oracle.column.types、oracle.write.native.boolean、oracle.append.hint.enabled、overwrite.with.recreate、マージフィルターが公開されています。
ユーザーがベクター、JSON、boolean、追記パフォーマンス、アップサートについて質問した場合にこれらを提示してください。extra={"oracle.jdbc.timezoneAsRegion": "false"} を設定してください。aidp-oracle-db — Generic Oracle Database via AIDP aidataplatformFor 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.
aidp-alh. Autonomous always uses TCPS + wallet (or IAM DB-Token) — aidp-oracle-db won't work.aidp-exacs. ExaCS has its own NNE pattern.sys.path (run aidp-connectors-bootstrap first).ORADB_HOST, ORADB_PORT (typically 1521)ORADB_DATABASE_NAME (Oracle service name) or ORADB_DATABASE_SIDORADB_USER, ORADB_PASSWORDORADB_SCHEMA, ORADB_TABLEimport 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)
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)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']}"
)
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 is the Oracle service name; database.sid is the SID. Both are supported by the official sample option table; don't confuse either with schema.wallet.content, wallet.path, wallet.password), but plain user/password is the default sample path. For Autonomous DB, use aidp-alh.socket.create_connection((host, 1521), timeout=8). Failure = network problem (NSG / route table / DNS), not auth.CREATE, APPEND, OVERWRITE, and MERGE. For MERGE, pass write.merge.keys.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.extra={"oracle.jdbc.timezoneAsRegion": "false"} if you see TZ drift.原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。