• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialdevelopment

aidp-jdbc-custom

プラグイン
oracle-ai-data-platform-workbench-spark-connectors
ソース
GitHub で見る ↗
説明

JDBC ドライバー(汎用データベース接続規格)がある任意のデータベースに、AIDP ノートブック上から Spark のネイティブ `format("jdbc")` を使って接続します。 **次のような場合に使用:** - ユーザーが AIDP 専用コネクター(接続機能)のないデータベース(SQLite、ClickHouse、DuckDB など)に言及した場合 - 汎用の JDBC URL を指定したい場合 - ユーザーがアップロード済みのカスタム JDBC ドライバーを使いたい場合 認証方法はドライバーの種類によって異なります。

原文を表示

Connect to ANY database that has a JDBC driver from an AIDP notebook using Spark's native `format("jdbc")`. Use when the user mentions a DB without a dedicated AIDP connector — SQLite, ClickHouse, DuckDB, generic JDBC URL — or wants to use a custom JDBC driver they uploaded. Auth is driver-specific.

ユースケース
  • AIDP専用コネクターのないデータベースに接続するとき
  • 汎用のJDBC URLを指定したいとき
  • カスタムJDBCドライバーを使いたいとき
本文(日本語訳)

aidp-jdbc-custom — 汎用JDBCエスケープハッチ

JDBCドライバを備えたすべてのデータベースに対応する万能スキル。AIDP形式を経由せず、Sparkネイティブ(標準機能)のJDBCを直接使用します。SQLite、ClickHouse、DuckDB、SAP HANAなど、ユーザーがアップロードしたニッチなドライバにも対応しています。(IBM DB2についてはAIDP 4.1以上で専用コネクタが用意されているため、aidp-db2をご使用ください。)

使用する場合

  • このプラグインに専用のaidp-*スキルが存在しないデータベースを使う
  • ユーザーが使いたいJDBCドライバの.jarファイルを持っている
  • 「custom JDBC」「JDBCドライバ」「任意のJDBC」といった指示が出ている

使用しない場合

  • Postgres、MySQL、SQL Server、Oracleについては、専用スキルをご使用ください。aidataplatform形式は、このスキルにはない接続の最適化(プッシュダウン)と接続プーリング(再利用)を提供します。
  • Snowflakeについてはaidp-snowflakeをご使用ください。Sparkコネクタは生のJDBCより大幅に優れています。

付属していないJDBCドライバを読み込む2つの方法

方法A — ランタイム読み込み(推奨:クラスタ再起動なし)

このプラグインには、実行中のSparkセッションにJDBC JARを動的に読み込むヘルパーが付属しています。Javaの標準機能(URLClassLoader + DriverManager)を使用し、管理者権限がなくてもカーネルを再起動せずに機能します。

import os
from oracle_ai_data_platform_connectors.jdbc import (
    add_jdbc_jar_at_runtime, download_jdbc_jar,
)

# 1回ダウンロード(AIDPクラスタからMaven Centralに到達可能)
jar = download_jdbc_jar(
    maven_url="https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.46.0.0/sqlite-jdbc-3.46.0.0.jar",
    target_path="/tmp/sqlite-jdbc-3.46.0.0.jar",
)

# 実行中のSparkセッションに登録
add_jdbc_jar_at_runtime(spark, jar_path=jar, driver_class="org.sqlite.JDBC")

# 標準的なSpark JDBCが使用可能に
df = (spark.read.format("jdbc")
      .option("url",      "jdbc:sqlite::memory:")
      .option("driver",   "org.sqlite.JDBC")
      .option("dbtable",  "(SELECT 1 AS c1, 2 AS c2, 3 AS c3)")
      .option("fetchsize","1000")
      .load())
df.show()

ヘルパーの実装はscripts/oracle_ai_data_platform_connectors/jdbc/runtime_load.pyにあります。内部では既存のスレッドコンテキストローダーをベースにURLClassLoaderを構築し、DriverManager.registerDriverを呼び出して、JVMのスレッドコンテキストクラスローダーを設定することで、SparkがドライバクラスをNameResolver(名前解決)で見つけられるようにしています。

方法B — クラスタライブラリタブ(永続化:管理者権限が必要)

頻繁に使用するドライバについては、JARをボリュームにアップロードしてクラスタのライブラリタブで添付します。これによりクラスタの再起動後も永続化されます。クラスタ管理者のアクセス権が必要です。添付および再起動後:

# ドライバクラスはシステムクラスパスに存在するため、ランタイムの工夫は不要です
df = (spark.read.format("jdbc")
      .option("url", JDBC_URL).option("driver", DRIVER)
      .option("dbtable", TABLE).load())

汎用テンプレート

df = (spark.read.format("jdbc")
      .option("url",      "jdbc:<vendor>://<host>:<port>/<db>")
      .option("driver",   "<full.class.Name>")
      .option("user",     os.environ["CUST_DB_USER"])
      .option("password", os.environ["CUST_DB_PASSWORD"])
      .option("dbtable",  os.environ["CUST_DB_TABLE"])
      .option("fetchsize", "10000")
      .load())

一般的なドライバクラス

DB ドライバクラス URLプレフィックス
SQLite org.sqlite.JDBC jdbc:sqlite:
ClickHouse com.clickhouse.jdbc.ClickHouseDriver jdbc:clickhouse://
DuckDB org.duckdb.DuckDBDriver jdbc:duckdb:
IBM DB2(AIDP 4.1未満のみ — aidp-db2またはtype=DB2を推奨) com.ibm.db2.jcc.DB2Driver jdbc:db2://
SAP HANA com.sap.db.jdbc.Driver jdbc:sap://
Vertica com.vertica.jdbc.Driver jdbc:vertica://

注意点

  • 述語プッシュダウン(フィルター条件の最適化)はSparkの推論範囲に限定されます。 このスキルはエスケープハッチで、最適化されたパスではありません。
  • dbtableは副問い合わせを受け入れます — 括弧で囲んでソース側でフィルタリング: option("dbtable", "(SELECT * FROM big_table WHERE date > '2025-01-01') t")
  • fetchsize=10000はお勧めのデフォルト値です — 小さい値はドライバの余分な通信を生み、大きい値はエグゼキューターのメモリ不足を招くリスクがあります。
  • パーティショニング — 並列読み込みにはoption("partitionColumn", ...).option("lowerBound", ...).option("upperBound", ...).option("numPartitions", N)を使用。これがないと読み込みは単一パーティション・直列実行になります。
  • ドライバJARの不一致 — 症状はClassNotFoundException: <driver class>です。JARが実行中のクラスタに添付されている(ボリュームにアップロードされているだけでなく)ことを確認してください。

参考資料

  • 公式サンプル: oracle-samples/oracle-aidp-samples → data-engineering/ingestion/Connect_Using_Custom_JDBC_Driver.ipynb
  • Spark JDBC ドキュメント: https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
原文(English)を表示

aidp-jdbc-custom — Generic JDBC escape hatch

The catch-all skill for any DB with a JDBC driver. Skips the AIDP aidataplatform format and uses native Spark JDBC. Useful for DBs like SQLite, ClickHouse, DuckDB, SAP HANA, or any niche driver the user has uploaded. (IBM DB2 has a dedicated connector on AIDP 4.1+ — use aidp-db2.)

When to use

  • The DB doesn't have a dedicated aidp-* skill in this plugin.
  • User has a .jar JDBC driver they want to use.
  • Mentioned: "custom JDBC", "JDBC driver", "any JDBC".

When NOT to use

  • For Postgres / MySQL / SQL Server / Oracle → use the dedicated skill. The aidataplatform format gives the connector pushdown and connection pooling that this skill doesn't.
  • For Snowflake → aidp-snowflake. The Spark connector is much better than raw JDBC.

Two ways to load a non-bundled JDBC driver

Option A — Runtime-load (recommended; no cluster restart)

The plugin ships a helper that loads a JDBC JAR into a running Spark session via Java's URLClassLoader + DriverManager. It works without admin access and without restarting the kernel.

import os
from oracle_ai_data_platform_connectors.jdbc import (
    add_jdbc_jar_at_runtime, download_jdbc_jar,
)

# Download once (Maven Central is reachable from AIDP clusters)
jar = download_jdbc_jar(
    maven_url="https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.46.0.0/sqlite-jdbc-3.46.0.0.jar",
    target_path="/tmp/sqlite-jdbc-3.46.0.0.jar",
)

# Register with the running Spark session
add_jdbc_jar_at_runtime(spark, jar_path=jar, driver_class="org.sqlite.JDBC")

# Now standard Spark JDBC works
df = (spark.read.format("jdbc")
      .option("url",      "jdbc:sqlite::memory:")
      .option("driver",   "org.sqlite.JDBC")
      .option("dbtable",  "(SELECT 1 AS c1, 2 AS c2, 3 AS c3)")
      .option("fetchsize","1000")
      .load())
df.show()

The helper is implemented at scripts/oracle_ai_data_platform_connectors/jdbc/runtime_load.py — internally it builds a URLClassLoader rooted at the existing thread context loader, calls DriverManager.registerDriver, and sets the JVM thread context class loader so Spark's Utils.classForName resolves the driver class.

Option B — Cluster Library tab (durable, requires admin)

For frequently-used drivers, upload the JAR to a Volume and attach via the cluster Library tab. This persists across cluster restarts. Requires cluster admin access. After attach + restart:

# Driver class is now on the system classpath; no runtime trick needed.
df = (spark.read.format("jdbc")
      .option("url", JDBC_URL).option("driver", DRIVER)
      .option("dbtable", TABLE).load())

Generic template

df = (spark.read.format("jdbc")
      .option("url",      "jdbc:<vendor>://<host>:<port>/<db>")
      .option("driver",   "<full.class.Name>")
      .option("user",     os.environ["CUST_DB_USER"])
      .option("password", os.environ["CUST_DB_PASSWORD"])
      .option("dbtable",  os.environ["CUST_DB_TABLE"])
      .option("fetchsize", "10000")
      .load())

Common driver classes

DB Driver class URL prefix
SQLite org.sqlite.JDBC jdbc:sqlite:
ClickHouse com.clickhouse.jdbc.ClickHouseDriver jdbc:clickhouse://
DuckDB org.duckdb.DuckDBDriver jdbc:duckdb:
IBM DB2 (pre-4.1 AIDP only — prefer aidp-db2 / type=DB2) com.ibm.db2.jcc.DB2Driver jdbc:db2://
SAP HANA com.sap.db.jdbc.Driver jdbc:sap://
Vertica com.vertica.jdbc.Driver jdbc:vertica://

Gotchas

  • No predicate pushdown beyond what Spark JDBC infers. This skill is the escape hatch, not the optimized path.
  • dbtable accepts a subquery — wrap in parens to filter at the source: option("dbtable", "(SELECT * FROM big_table WHERE date > '2025-01-01') t").
  • fetchsize=10000 is a good default; smaller values create driver chatter, larger values risk OOM on the executor.
  • Partitioning — for parallel reads, use option("partitionColumn", ...).option("lowerBound", ...).option("upperBound", ...).option("numPartitions", N). Without these the read is single-partition and serial.
  • Driver JAR mismatch — symptom is ClassNotFoundException: <driver class>. Re-check that the JAR is attached to the running cluster (not just uploaded to a Volume).

References

  • Official sample: oracle-samples/oracle-aidp-samples → data-engineering/ingestion/Connect_Using_Custom_JDBC_Driver.ipynb
  • Spark JDBC docs: https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

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