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-custom — 汎用JDBCエスケープハッチJDBCドライバを備えたすべてのデータベースに対応する万能スキル。AIDP形式を経由せず、Sparkネイティブ(標準機能)のJDBCを直接使用します。SQLite、ClickHouse、DuckDB、SAP HANAなど、ユーザーがアップロードしたニッチなドライバにも対応しています。(IBM DB2についてはAIDP 4.1以上で専用コネクタが用意されているため、aidp-db2をご使用ください。)
aidp-*スキルが存在しないデータベースを使う.jarファイルを持っているaidataplatform形式は、このスキルにはない接続の最適化(プッシュダウン)と接続プーリング(再利用)を提供します。aidp-snowflakeをご使用ください。Sparkコネクタは生のJDBCより大幅に優れています。このプラグインには、実行中の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(名前解決)で見つけられるようにしています。
頻繁に使用するドライバについては、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:// |
dbtableは副問い合わせを受け入れます — 括弧で囲んでソース側でフィルタリング: option("dbtable", "(SELECT * FROM big_table WHERE date > '2025-01-01') t")fetchsize=10000はお勧めのデフォルト値です — 小さい値はドライバの余分な通信を生み、大きい値はエグゼキューターのメモリ不足を招くリスクがあります。option("partitionColumn", ...).option("lowerBound", ...).option("upperBound", ...).option("numPartitions", N)を使用。これがないと読み込みは単一パーティション・直列実行になります。ClassNotFoundException: <driver class>です。JARが実行中のクラスタに添付されている(ボリュームにアップロードされているだけでなく)ことを確認してください。aidp-jdbc-custom — Generic JDBC escape hatchThe 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.)
aidp-* skill in this plugin..jar JDBC driver they want to use.aidataplatform format gives the connector pushdown and connection pooling that this skill doesn't.aidp-snowflake. The Spark connector is much better than raw JDBC.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.
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())
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 | 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:// |
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.option("partitionColumn", ...).option("lowerBound", ...).option("upperBound", ...).option("numPartitions", N). Without these the read is single-partition and serial.ClassNotFoundException: <driver class>. Re-check that the JAR is attached to the running cluster (not just uploaded to a Volume).原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。