claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🗄️aidp-oracle-db

説明

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 ノートブックの前提条件

  1. sys.path 上にヘルパーが存在すること(事前に aidp-connectors-bootstrap を実行してください)。
  2. ネットワーク: クラスターがリスナーポート(通常 1521)で Oracle DB ホストに到達できること。 顧客 VCN 内のプライベート DB の場合は、VCN ピアリングが必要です。
  3. 環境変数 / OCI Vault シークレット:
    • ORADB_HOSTORADB_PORT(通常 1521
    • ORADB_DATABASE_NAME(Oracle サービス名)または ORADB_DATABASE_SID
    • ORADB_USERORADB_PASSWORD
    • ORADB_SCHEMAORADB_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.contentwallet.pathwallet.password)が、シンプルなユーザー名/パスワードがデフォルトのサンプルパスです。 Autonomous DB の場合は aidp-alh を使用してください。
  • ネットワーク到達性が最も多い障害原因です。 クラスターからの疎通確認: socket.create_connection((host, 1521), timeout=8)。 失敗した場合はネットワークの問題(NSG / ルートテーブル / DNS)であり、認証の問題ではありません。
  • 書き込みモードCREATEAPPENDOVERWRITEMERGE があります。 MERGE を使用する場合は write.merge.keys を指定してください。
  • Oracle 書き込みオプション — サンプルでは preserve.oracle.column.typesoracle.write.native.booleanoracle.append.hint.enabledoverwrite.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-db won'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

  1. Helpers on sys.path (run aidp-connectors-bootstrap first).
  2. Network: cluster must reach the Oracle DB host on the listener port (typically 1521). For private DBs in customer VCNs, VCN peering is required.
  3. Env vars / OCI Vault secrets:
    • ORADB_HOST, ORADB_PORT (typically 1521)
    • ORADB_DATABASE_NAME (Oracle service name) or ORADB_DATABASE_SID
    • ORADB_USER, ORADB_PASSWORD
    • ORADB_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.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 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, use aidp-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 modesCREATE, APPEND, OVERWRITE, and MERGE. For MERGE, pass write.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 による自動翻訳です。