claude-skills/

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

last sync 22h ago
スキルOfficialdevelopment

🗄️aidp-alh

説明

AIDPノートブックからOracle AI Lakehouse(ALH)、Autonomous Data Warehouse(ADW)、またはAutonomous Transaction Processing(ATP)に接続します。 ウォレット/パスワード認証および `catalog.id` パス(`ORACLE_ALH` / `ORACLE_ATP`)には、AIDPの `aidataplatform` Spark フォーマットハンドラーを優先して使用してください。 ただし、IAM DBトークン認証の場合は、AIDPコネクターがDBトークン認証をまだサポートしていないため、生のSpark JDBCを使用してください。

原文を表示

Connect from an AIDP notebook to Oracle AI Lakehouse (ALH), Autonomous Data Warehouse (ADW), or Autonomous Transaction Processing (ATP). Prefer the AIDP `aidataplatform` Spark format handler for wallet/password and catalog.id paths (`ORACLE_ALH` / `ORACLE_ATP`), but use raw Spark JDBC for IAM DB-token because the AIDP connector does not support DB-token auth yet.

ユースケース

  • Oracle AI Lakehouseに接続するとき
  • Autonomous Data Warehouseに接続するとき
  • Autonomous Transaction Processingに接続するとき
  • ウォレット/パスワード認証で接続するとき

本文(日本語訳)

aidp-alh — AIDP aidataplatform 経由での Oracle AI Lakehouse / ADW / ATP

このスキルは、公式 AIDP インジェストコネクターを使用して Oracle Autonomous Database ファミリー全体 をカバーします。 Oracle AI Lakehouse / ADW スタイルの接続には ORACLE_ALH を、ユーザーが ATP を明示的に指定した場合は ORACLE_ATP を使用してください。

ユーザーが ATP または ADW を具体的に指定した場合は、このスキルをそのまま使用し、環境変数プレフィックス(ATP_* / ADW_*)を ALH_* に読み替えて同様の手順で進めてください。


次のような場合に使用

  • AIDP ノートブックから ALH・ADW・ATP テーブルの読み書きを行いたい場合。
  • ユーザーが次のキーワードを挙げた場合: 「ALH」「AI Lakehouse」「ADW」「Autonomous Data Warehouse」「ATP」「Autonomous Transaction Processing」「Autonomous Database」「26ai lakehouse」「lakehouse external catalog」
  • ウォレットの内容またはパス、TNS エイリアス、DB ユーザー名/パスワード、あるいは既存の AIDP external catalog ID を保持している場合。

次のような場合には使用しない

  • ExaCS の場合 → aidp-exacs を使用。
  • Autonomous でない Oracle Database の場合 → aidp-oracle-db を使用。

AIDP ノートブックの前提条件

  1. 組み込みの aidataplatform Spark フォーマットハンドラーを備えた AIDP クラスター。
  2. 以下のいずれか:
    • Base64 エンコードされたウォレットの内容
    • Workspace または Volume パス上のウォレット ZIP
    • 既存の external catalog ID
    • 生の JDBC 例外パス用の IAM DB トークン要件
  3. 環境変数 / OCI Vault シークレット:
    • ALH_WALLET_CONTENT または ALH_WALLET_PATH
    • ALH_TNSALH_USERALH_PASSWORD
    • ALH_SCHEMAALH_TABLE
    • (任意)ALH_CATALOG_ID

読み込み(インラインコネクターオプション)

import os
from oracle_ai_data_platform_connectors.aidataplatform import (
    AIDP_FORMAT, aidataplatform_options,
)

opts = aidataplatform_options(
    type=os.environ.get("ALH_CONNECTOR_TYPE", "ORACLE_ALH"),  # ATP の場合は ORACLE_ATP を使用
    user=os.environ["ALH_USER"],
    password=os.environ["ALH_PASSWORD"],
    schema=os.environ["ALH_SCHEMA"],
    table=os.environ["ALH_TABLE"],
    extra={
        "wallet.content": os.environ["ALH_WALLET_CONTENT"],
        "tns": os.environ["ALH_TNS"],
    },
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show()

wallet.path を使用した読み込み

opts = aidataplatform_options(
    type="ORACLE_ALH",
    user=os.environ["ALH_USER"],
    password=os.environ["ALH_PASSWORD"],
    schema=os.environ["ALH_SCHEMA"],
    table=os.environ["ALH_TABLE"],
    extra={
        "wallet.path": os.environ["ALH_WALLET_PATH"],  # /Workspace/... または /Volumes/...
        "tns": os.environ["ALH_TNS"],
    },
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()

書き込み(インラインコネクターオプション)

opts["table"] = os.environ["ALH_TARGET_TABLE"]
opts["write.mode"] = os.environ.get("ALH_WRITE_MODE", "APPEND")  # CREATE | APPEND | OVERWRITE | MERGE
df.write.format(AIDP_FORMAT).options(**opts).save()

既存の external catalog を使用する場合(catalog.id

catalog_opts = aidataplatform_options(
    type="ORACLE_ALH",
    schema=os.environ["ALH_SCHEMA"],
    table=os.environ["ALH_TABLE"],
    extra={"catalog.id": os.environ["ALH_CATALOG_ID"]},
)
df = spark.read.format(AIDP_FORMAT).options(**catalog_opts).load()

df.write.format(AIDP_FORMAT).options(
    **{
        "catalog.id": os.environ["ALH_CATALOG_ID"],
        "schema": os.environ["ALH_SCHEMA"],
        "table": os.environ["ALH_TARGET_TABLE"],
        "write.mode": "APPEND",
    }
).save()

External catalog のテーブルアクセスでは、3 パート名も使用できます:

df = spark.table(f"{os.environ['ALH_CATALOG_ID']}.{os.environ['ALH_SCHEMA']}.{os.environ['ALH_TABLE']}")
df.write.mode("append").insertInto(
    f"{os.environ['ALH_CATALOG_ID']}.{os.environ['ALH_SCHEMA']}.{os.environ['ALH_TARGET_TABLE']}"
)

プッシュダウン

pushdown_opts = aidataplatform_options(
    type="ORACLE_ALH",
    user=os.environ["ALH_USER"],
    password=os.environ["ALH_PASSWORD"],
    extra={
        "wallet.content": os.environ["ALH_WALLET_CONTENT"],
        "tns": os.environ["ALH_TNS"],
        "pushdown.sql": "SELECT * FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = 10",
    },
)
df = spark.read.format(AIDP_FORMAT).options(**pushdown_opts).load()

IAM DB トークン例外(生の Spark JDBC)

AIDP 組み込みの aidataplatform コネクターは、現時点では IAM DB トークン認証をサポートしていません。 ユーザーが DB トークンを明示的に必要とする場合は、ヘルパーパッケージを使用した生の Spark JDBC を使用してください:

import os
from oracle_ai_data_platform_connectors.auth import generate_db_token
from oracle_ai_data_platform_connectors.auth.dbtoken import refresh_on_executors
from oracle_ai_data_platform_connectors.jdbc import (
    build_oracle_jdbc_url, spark_jdbc_options_dbtoken,
)

token_dir = generate_db_token(
    compartment_ocid=os.environ["ALH_COMPARTMENT_OCID"],
    target_dir="/tmp/dbcred_alh",
)

url = build_oracle_jdbc_url(
    tns_alias=os.environ["ALH_TNS"],
    tns_admin=os.environ["ALH_WALLET_DIR"],  # /tmp 以下に展開したウォレットディレクトリ
)
opts = spark_jdbc_options_dbtoken(url=url, token_dir=token_dir)

df = (
    spark.read.format("jdbc")
    .options(**opts)
    .option("dbtable", f"{os.environ['ALH_SCHEMA']}.{os.environ['ALH_TABLE']}")
    .load()
)
df.show()

# 長時間ジョブの場合、パーティション処理の前にエグゼキューター上で DB トークンをリフレッシュする。
refresh = refresh_on_executors(spark, os.environ["ALH_COMPARTMENT_OCID"], token_dir)

注意事項

  • 接続が AIDP にすでに存在する場合は catalog.id を優先して使用してください。 ホスト情報・ウォレット・認証情報を生成されたノートブックから切り離すことができます。
  • ソース側のフィルタリングには、Oracle SQL のセマンティクスを正確に利用したい場合は pushdown.sql を優先してください。 自動プッシュダウンで十分な場合は DataFrame の .select(...).filter(...).limit(...) を使用してください。
  • 組み込みコネクターでは wallet.content または wallet.path を使用してください。 生の Spark JDBC へのフォールバックを意図する場合を除き、/tmp にウォレットを展開しないでください。
  • IAM DB トークンは、aidataplatform が未対応であるため、意図的に生の JDBC へフォールバックする主なケースです。
  • ORACLE_ALHORACLE_ATP は別々のコネクタータイプのリテラルです。 ATP のサンプルをそのまま適用する場合は ORACLE_ATP を使用してください。
  • Instance Principal / Resource Principal は現在 AIDP ノートブックでブロックされています(IMDS に到達不可、RP トークン未提供)。 InstancePrincipalsSecurityTokenSigner() を使用しないでください。

参考資料

原文(English)を表示

aidp-alh — Oracle AI Lakehouse / ADW / ATP via AIDP aidataplatform

This skill covers the entire Oracle Autonomous Database family using the official AIDP ingestion connectors. Use ORACLE_ALH for Oracle AI Lakehouse / ADW-style connections and ORACLE_ATP when the user specifically wants ATP.

If the user names ATP or ADW specifically, just use this skill — substitute the env-var prefix (ATP_* / ADW_*) for ALH_* and proceed identically.

When to use

  • User wants to read or write an ALH, ADW, or ATP table from an AIDP notebook.
  • User mentions: "ALH", "AI Lakehouse", "ADW", "Autonomous Data Warehouse", "ATP", "Autonomous Transaction Processing", "Autonomous Database", "26ai lakehouse", "lakehouse external catalog".
  • User has wallet content/path, a TNS alias, DB username/password, or an existing AIDP external catalog id.

When NOT to use

Prerequisites in the AIDP notebook

  1. AIDP cluster with the built-in aidataplatform Spark format handler.
  2. One of: base64 wallet content, wallet zip at a Workspace/Volume path, an existing external catalog id, or IAM DB-token requirements for the raw JDBC exception path.
  3. Env vars / OCI Vault secrets:
    • ALH_WALLET_CONTENT or ALH_WALLET_PATH
    • ALH_TNS, ALH_USER, ALH_PASSWORD
    • ALH_SCHEMA, ALH_TABLE
    • optional ALH_CATALOG_ID

Read (inline connector options)

import os
from oracle_ai_data_platform_connectors.aidataplatform import (
    AIDP_FORMAT, aidataplatform_options,
)

opts = aidataplatform_options(
    type=os.environ.get("ALH_CONNECTOR_TYPE", "ORACLE_ALH"),  # use ORACLE_ATP for ATP
    user=os.environ["ALH_USER"],
    password=os.environ["ALH_PASSWORD"],
    schema=os.environ["ALH_SCHEMA"],
    table=os.environ["ALH_TABLE"],
    extra={
        "wallet.content": os.environ["ALH_WALLET_CONTENT"],
        "tns": os.environ["ALH_TNS"],
    },
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show()

Read using wallet.path

opts = aidataplatform_options(
    type="ORACLE_ALH",
    user=os.environ["ALH_USER"],
    password=os.environ["ALH_PASSWORD"],
    schema=os.environ["ALH_SCHEMA"],
    table=os.environ["ALH_TABLE"],
    extra={
        "wallet.path": os.environ["ALH_WALLET_PATH"],  # /Workspace/... or /Volumes/...
        "tns": os.environ["ALH_TNS"],
    },
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()

Write (inline connector options)

opts["table"] = os.environ["ALH_TARGET_TABLE"]
opts["write.mode"] = os.environ.get("ALH_WRITE_MODE", "APPEND")  # CREATE | APPEND | OVERWRITE | MERGE
df.write.format(AIDP_FORMAT).options(**opts).save()

Use an existing external catalog (catalog.id)

catalog_opts = aidataplatform_options(
    type="ORACLE_ALH",
    schema=os.environ["ALH_SCHEMA"],
    table=os.environ["ALH_TABLE"],
    extra={"catalog.id": os.environ["ALH_CATALOG_ID"]},
)
df = spark.read.format(AIDP_FORMAT).options(**catalog_opts).load()

df.write.format(AIDP_FORMAT).options(
    **{
        "catalog.id": os.environ["ALH_CATALOG_ID"],
        "schema": os.environ["ALH_SCHEMA"],
        "table": os.environ["ALH_TARGET_TABLE"],
        "write.mode": "APPEND",
    }
).save()

For external-catalog table access, three-part names are also supported:

df = spark.table(f"{os.environ['ALH_CATALOG_ID']}.{os.environ['ALH_SCHEMA']}.{os.environ['ALH_TABLE']}")
df.write.mode("append").insertInto(
    f"{os.environ['ALH_CATALOG_ID']}.{os.environ['ALH_SCHEMA']}.{os.environ['ALH_TARGET_TABLE']}"
)

Pushdown

pushdown_opts = aidataplatform_options(
    type="ORACLE_ALH",
    user=os.environ["ALH_USER"],
    password=os.environ["ALH_PASSWORD"],
    extra={
        "wallet.content": os.environ["ALH_WALLET_CONTENT"],
        "tns": os.environ["ALH_TNS"],
        "pushdown.sql": "SELECT * FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = 10",
    },
)
df = spark.read.format(AIDP_FORMAT).options(**pushdown_opts).load()

IAM DB-token exception (raw Spark JDBC)

AIDP's built-in aidataplatform connector does not support IAM DB-token auth yet. If the user explicitly needs DB-token, use raw Spark JDBC with the helper package:

import os
from oracle_ai_data_platform_connectors.auth import generate_db_token
from oracle_ai_data_platform_connectors.auth.dbtoken import refresh_on_executors
from oracle_ai_data_platform_connectors.jdbc import (
    build_oracle_jdbc_url, spark_jdbc_options_dbtoken,
)

token_dir = generate_db_token(
    compartment_ocid=os.environ["ALH_COMPARTMENT_OCID"],
    target_dir="/tmp/dbcred_alh",
)

url = build_oracle_jdbc_url(
    tns_alias=os.environ["ALH_TNS"],
    tns_admin=os.environ["ALH_WALLET_DIR"],  # extracted wallet directory under /tmp
)
opts = spark_jdbc_options_dbtoken(url=url, token_dir=token_dir)

df = (
    spark.read.format("jdbc")
    .options(**opts)
    .option("dbtable", f"{os.environ['ALH_SCHEMA']}.{os.environ['ALH_TABLE']}")
    .load()
)
df.show()

# For long-running jobs, refresh the DB token on executors before partition work.
refresh = refresh_on_executors(spark, os.environ["ALH_COMPARTMENT_OCID"], token_dir)

Gotchas

  • Prefer catalog.id when the connection already exists in AIDP; it keeps host, wallet, and credentials out of generated notebooks.
  • For source-side filtering, prefer pushdown.sql for precise Oracle SQL semantics, or DataFrame .select(...).filter(...).limit(...) when automatic pushdown is enough.
  • Use wallet.content or wallet.path with the built-in connector; do not materialize wallets into /tmp unless you are intentionally falling back to raw Spark JDBC.
  • IAM DB-token is the main intentional raw JDBC fallback because aidataplatform does not support it yet.
  • ORACLE_ALH and ORACLE_ATP are separate connector type literals. Use ORACLE_ATP when adapting the ATP sample exactly.
  • Instance Principal / Resource Principal are blocked in AIDP notebooks today (IMDS unreachable, RP tokens not provided). Do not try InstancePrincipalsSecurityTokenSigner().

References

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。