JDBC接続
この機能は、Databricks Runtime 18.1、およびDBSQL 2025.40以降でパブリックプレビュー版として提供されています。SQLウェアハウスの場合は、 「サーバレスSQLウェアハウスで分離されたワークロードのネットワークを有効にする」 プレビューもオプトインする必要があります。
Databricks は、JDBC を使用した外部データベースへの接続をサポートしています。JDBC Unity Catalog接続を使用して、 SparkデータソースAPIまたはDatabricks Remote Query SQL APIでデータ ソースの読み取りと書き込みを行うことができます。 JDBC 接続は、Unity Catalog 内のセキュリティ保護可能なオブジェクトであり、外部データベースにアクセスするための JDBC ドライバー、URL パス、および資格情報を指定します。JDBC接続は、サーバレス、標準クラスタ、専用クラスタ、 Databricks SQLなどのUnity Catalogコンピュート タイプ全体でサポートされています。
JDBC接続を使用する利点
- JDBCとSparkデータソースAPIを使用してデータソースの読み取りと書き込みを行います。
- Remote Query SQL APIを使用してJDBCでデータソースから読み取ります。
- Unity Catalog接続を使用したデータソースへの管理されたアクセス。
- 接続を一度作成すると、 Unity Catalogコンピュート全体で再利用できます。
- Sparkおよびコンピュートのアップグレードに対して安定しています。
- 接続資格情報はクエリを実行するユーザーに対して非表示になります。
JDBCとクエリフェデレーション
JDBC はクエリ フェデレーションを補完します。Databricks では、次の理由からクエリ フェデレーションを選択することを推奨しています。
- クエリ フェデレーションは、フォーリンカタログを使用してテーブル レベルでのきめ細かいアクセス制御とガバナンスを提供します。 JDBC Unity Catalog接続は、接続レベルでのみガバナンスを提供します。
- クエリ フェデレーションは、最適なクエリ パフォーマンスを実現するために Spark クエリをプッシュダウンします。
クエリ フェデレーションは、 Oracle 、 MySQL 、 PostgreSQL 、 SQL Server 、 Snowflakeなど、多くの一般的なデータベースをサポートしています。データベースがサポートされている場合、Databricks では JDBC 接続ではなくクエリ フェデレーションを使用することをお勧めします。サポートされているデータベースの完全なリストについては、レイクハウスフェデレーションを参照してください。
ただし、次のシナリオでは、 JDBC Unity Catalog接続を使用することを選択します。
- データベースはクエリ フェデレーションではサポートされていません。
- 特定の JDBC ドライバーを使用したい。
- Sparkを使用してデータ ソースに書き込む必要があります (クエリ フェデレーションは書き込みをサポートしていません)。
- SparkデータソースAPIオプションを使用して、さらなる柔軟性、パフォーマンス、および並列化制御が必要です。
- Spark
queryオプションを使用してSQLクエリをプッシュダウンしたい。
PySparkソースではなくJDBCを使用する理由は何ですか?
PySparkデータソースは、 JDBC Sparkデータソースの代替です。
JDBC 接続を使用します。
- 組み込みの Spark JDBC サポートを使用する場合。
- すでに存在するすぐに使用可能な JDBC ドライバーを使用する場合。
- 接続レベルでの Unity Catalog ガバナンスが必要な場合。
- Unity Catalogコンピュートから接続する場合は、「サーバレス」、「標準」、「専用」、 SQL APIと入力します。
- Python 、 Scala 、 SQL APIsとの接続を使用する場合。
PySparkデータソースを使用します。
- Pythonを使用してSparkデータソースまたはデータシンクを柔軟に開発および設計したい場合。
- ノートブックまたは PySpark ワークロードでのみ使用する場合。
- カスタム パーティション ロジックを実装する場合。
JDBCもPySparkデータ ソースも、操作の順序の選択に役立つ統計をクエリ オプティマイザーに公開しません。
仕組み
JDBC接続を使用してデータ ソースに接続するには、 SparkコンピュートにJDBCドライバーをインストールします。 この接続により、 Sparkコンピュートからアクセスできる分離されたサンドボックスにJDBCドライバーを指定してインストールでき、 SparkセキュリティとUnity Catalogガバナンスを確保できます。 サンドボックスの詳細については、 Databricksユーザー分離をどのように強制しますか?」を参照してください。 。
始める前に
サーバレスおよび標準クラスターでSparkデータソースAPIとのJDBC接続を使用するには、まず次の要件を満たす必要があります。
ワークスペースの要件:
- Unity Catalog に対応した Databricks ワークスペース
コンピュートの要件:
- コンピュート リソースからターゲット データベース システムへのネットワーク接続。 「ネットワーク接続」を参照してください。
- Databricksコンピュートは、標準モードまたは専用アクセス モードでサーバレス、またはDatabricks Runtime 17.3 LTS以降を使用する必要があります。
- SQLはプロまたはサーバレスであり、2025.35 以降を使用する必要があります。
必要な権限:
- 接続を作成するには、ワークスペースにアタッチされたメタストアに対する
CREATE CONNECTION権限が必要です。 CREATEまたは、接続作成者によるUnity CatalogボリュームへのMANAGEアクセス。- 接続を照会するユーザーによるボリューム アクセス。
- 追加の権限は、後続の各タスクベースのセクションで指定されます。
認証方法
固定されている認証情報
静的資格情報認証では、資格情報を接続に直接保存します。—たとえば、ユーザー名とパスワード、API キー、またはターゲット JDBC ドライバーで受け入れられる他の資格情報フィールドなどです。接続の使用時に、資格情報はそのままJDBCドライバーに渡されます。
OAuthによるマシン間通信
Beta
This feature is in Beta. Workspace admins can control access to this feature from the Previews page. See Manage Databricks previews.
OAuth マシン間 (M2M) 認証は、2つのシステムまたはアプリケーションが直接ユーザーの関与なしに通信する場合に利用されます。独自の資格情報を使用して認証する登録済みマシンクライアントに、トークンが発行されます。この認証方法は、ユーザーコンテキストを必要としないサービス間の通信、マイクロサービス、自動化タスクに最適です。
JDBC接続でOAuth M2Mを使用する場合、Unity Catalogは、構成されたトークンエンドポイントでクライアント資格情報を交換し、ドライバーのトークンパラメーターを使用して、結果として得られる有効期間の短いアクセストークンのみをJDBCドライバーに渡します。
ステップ 1: ボリュームを作成し、 JDBC JARをインストールします
JDBC接続はUnity CatalogボリュームからJDBCドライバーJAR読み取ってインストールします。
-
既存のボリュームへの書き込みおよび読み取りアクセス権がない場合は、新しいボリュームを作成します。
SQLCREATE VOLUME IF NOT EXISTS my_catalog.my_schema.my_volume_JARs -
接続を照会するユーザーにボリュームの読み取りアクセス権を付与します。
SQLGRANT READ VOLUME ON VOLUME my_catalog.my_schema.my_volume_JARs TO `account users`
ステップ 2: JDBC接続を作成する
JDBC接続はUnity Catalogのセキュリティ保護可能なオブジェクトです。JDBCドライバー、URLパス、外部データベースシステムにアクセスするための認証情報、およびクエリを実行するユーザーが指定できる許可されたオプションを指定します。接続を作成するには、カタログエクスプローラーを使用するか、DatabricksノートブックまたはDatabricks SQLクエリ エディターで CREATE CONNECTION SQLコマンドを使用できます。サポートされている認証方法については、認証方法をご覧ください。
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。
必要な権限: メタストア管理者またはCREATE CONNECTION権限を持つユーザー。
接続を作成する前に、以下の点にご注意ください。
- URL と認証情報が唯一の必須オプションです。資格情報をURLに埋め込まないでください、ログやエラーによって公開される可能性があります。選択した認証方法には、専用の認証情報オプションをご利用ください。
externalOptionsAllowList使用すると、クエリ実行時にユーザーが指定できる Spark データソースのオプションを制御できます。指定がない場合、デフォルト値は'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'です。空の文字列に設定すると、ユーザーが接続で定義されたオプションのみを使用できるようになります。ユーザーはurlまたはhostを指定することはできません。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
接続 をクリックし、その後、 Connections をクリックします。
-
接続の作成 をクリックします。
-
接続のセットアップ ウィザードの 「接続の基本」 ページで、ユーザーフレンドリな 接続名 を入力します。
-
接続タイプ には、 JDBC を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
接続の詳細 ページで、次の接続プロパティを入力します。
属性 | 説明 |
|---|---|
URL | データベースのJDBC URL。形式は |
Javaの依存関係 | Unity CatalogボリュームからのJDBCドライバーJARファイル。各JAR(例: )を追加するには、**[JAR依存関係を追加]** |
外部オプション許可リスト | クエリー時にユーザーが指定できる、Spark データソースオプションのカンマ区切りリスト。デフォルトは |
追加オプション | 任意のJDBCドライバーオプションがキーと値のペアとしてドライバーに渡されます。このセクションを使用して、データベース資格情報(例:キー |
- 接続の作成 をクリックします。
OAuthマシン間 (Beta)
Beta
This feature is in Beta. Workspace admins can control access to this feature from the Previews page. See Manage Databricks previews.
jdbc_oauth_m2m_connectorワークスペースで プレビューが有効になっている場合、**接続の基本**ページに**静的認証情報**および**OAuthによるマシン間通信**オプションとともに**認証タイプ**フィールドが表示されます。 OAuth M2M JDBC 接続を作成するには:
-
接続の基本 ページで、 認証タイプ を OAuth Machine to Machine に設定してください。
-
次へ をクリックします。
-
接続の詳細 ページで、 URL および Javaの依存関係 に加えて、次のプロパティを入力します。
属性 | 説明 |
|---|---|
クライアントID | アプリケーションに発行されたOAuthクライアントIDです。 |
クライアントのシークレット | アプリケーションに発行された OAuth クライアントシークレット。 |
OAuthスコープ | トークン交換中にリクエストするスコープ。大文字と小文字を区別するスペース区切りの文字列のリストとして表現されます。 |
トークンのエンドポイント | クライアント資格情報をアクセストークンと交換するために使用されるOAuth 2.0トークンエンドポイントです。通常は |
OAuth認証情報の交換方法 | クライアント資格情報がトークンエンドポイントに渡される方法:
|
JDBCトークンパラメーター名 | ターゲットJDBCドライバーがOAuthアクセストークンを受け入れるために必要なプロパティ KEY 。Databricksは、生成された有効なOAuthアクセストークンをこのパラメーター VALUE に動的に設定します。 一般的な**KEY**: |
- 接続の作成 をクリックします。
固定されている認証情報 対応するボリューム、URL、資格情報、および 例: Oracle JDBC接続 次の例では、Oracle シン ドライバーを使用して Oracle データベースへの JDBC 接続を作成します。このコマンドを実行する前に、 Oracle JDBCダウンロード ページから Oracle JDBCドライバーJAR (たとえば、 OAuthによるマシン間通信 対応するボリューム、URL、資格情報、および 例: PostgreSQL JDBC接続 (OAuth M2M) 以下の例は、OAuthマシン間認証を使用してPostgreSQLデータベースへのJDBC接続を作成します。PostgreSQL JDBCダウンロードページからPostgreSQL JDBCドライバーJAR(たとえば、CREATE CONNECTION SQL コマンドをノートブックまたはDatabricks SQL クエリ エディターで実行します。externalOptionsAllowList を調整して、次のコマンドを実行します。DROP CONNECTION IF EXISTS <JDBC-connection-name>;
CREATE CONNECTION <JDBC-connection-name> TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/<catalog>/<Schema>/<volume_name>/JDBC_DRIVER_JAR_NAME.jar"]'
)
OPTIONS (
url 'jdbc:<database_URL_host_port>',
user '<user>',
password '<password>',
externalOptionsAllowList 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'
);
DESCRIBE CONNECTION <JDBC-connection-name>;ojdbc11.jar ) をダウンロードし、 Unity Catalogボリュームにアップロードしてください。CREATE CONNECTION oracle_connection TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/my_catalog/my_schema/my_volume_JARs/ojdbc11.jar"]'
)
OPTIONS (
url 'jdbc:oracle:thin:@<host>:<port>:<SID>',
user '<oracle_user>',
password '<oracle_password>',
externalOptionsAllowList 'dbtable,query'
);externalOptionsAllowList を調整して、次のコマンドを実行します。CREATE CONNECTION <JDBC-connection-name> TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/<catalog>/<schema>/<volume_name>/JDBC_DRIVER_JAR_NAME.jar"]'
)
OPTIONS (
url 'jdbc:<database_URL_host_port>',
client_id '<client-id>',
client_secret '<client-secret>',
oauth_scope '<scope>',
token_endpoint '<https://authorization-server.com/oauth/token>',
oauth_credential_exchange_method 'header_and_body',
jdbc_token_parameter_name '<driver-token-parameter-name>',
externalOptionsAllowList 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'
);postgresql-42.7.3.jar)をダウンロードし、Unity Catalogボリュームにアップロードしてから、このコマンドを実行してください。パスワードフィールドでOAuthアクセストークンを受け入れるように構成されているPostgreSQLデプロイメントの場合は、jdbc_token_parameter_nameをpasswordに設定します。CREATE CONNECTION postgres_oauth_connection TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/my_catalog/my_schema/my_volume_JARs/postgresql-42.7.3.jar"]'
)
OPTIONS (
url 'jdbc:postgresql://<host>:<port>/<database>?sslmode=require',
client_id '<client-id>',
client_secret '<client-secret>',
oauth_scope '<scope>',
token_endpoint 'https://authorization-server.com/oauth/token',
oauth_credential_exchange_method 'header_and_body',
jdbc_token_parameter_name 'password',
externalOptionsAllowList 'dbtable,query'
);
接続の所有者または管理者は、JDBCドライバがサポートする追加オプションを接続に追加できます。セキュリティ上の理由から、接続時に定義されたオプションはクエリ実行時に上書きできません。
ステップ 3: USE権限を付与します
接続に対するUSE権限をユーザーに付与します:
GRANT USE CONNECTION ON CONNECTION <connection-name> TO <user-name>;
既存の接続の管理については、 「レイクハウスフェデレーションの接続の管理」を参照してください。
ステップ 4: データソースをクエリする
USE CONNECTION権限を持つユーザーは、 Spark経由のJDBC接続またはリモート クエリSQL APIを使用して、データ ソースをクエリできます。 ユーザーは、 JDBCドライバーでサポートされ、 JDBC接続のexternalOptionsAllowListで指定されている任意のSparkデータ ソース オプションを追加できます (この場合は'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions' )。 許可されるオプションを表示するには、次のクエリを実行します。
DESCRIBE CONNECTION <JDBC-connection-name>;
- Python
- SQL
df = (
spark.read.format('jdbc')
.option('databricks.connection', '<JDBC-connection-name>')
.option('query', 'select * from <table_name>') # query in source SQL language - Option specified by querying user
.load()
)
df.display()
SELECT * FROM
remote_query('<JDBC-connection-name>', query => 'SELECT * FROM <table>'); -- query in source SQL language - Option specified by querying user
移住
既存のSparkデータソースAPIワークロードから移行するには、 Databricks次のことを行うことをお勧めします。
- SparkデータソースAPIのオプションから URL と認証情報を削除します。
- SparkデータソースAPIのオプションに
databricks.connectionを追加します。 - 対応する URL と資格情報を使用して JDBC 接続を作成します。
- 接続では、静的である必要があり、クエリユーザーによって指定されるべきではないオプションを指定します。
- 接続の
externalOptionsAllowListで、クエリ時にユーザーがSparkデータ ソースAPIコードで調整または変更する必要があるデータ ソース オプションを指定します (例:'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions')。
制限事項
Spark データソース API
- URL とホストをSparkデータソースAPIに含めることはできません。
.option("databricks.connection", "<Connection_name>")が必要です。- 接続で定義されたオプションは、クエリ時にコード内のデータソースAPIで使用することはできません。
- クエリを実行するユーザーは、
externalOptionsAllowListで指定されたオプションのみを使用できます。 - JDBC ドライバーのメモリ制限は 400 MiB です。制限に達した場合は、より小さい
fetchSizeの使用を検討してください。
サポート
- Sparkデータソースはサポートされていません。
- Lakeflow Spark宣言型パイプラインはサポートされていません。
- 作成時の接続依存関係:
java_dependenciesは、JDBC ドライバー JAR のボリュームの場所のみをサポートします。 - クエリでの接続依存性: 接続ユーザーには、JDBC ドライバー JAR が配置されているボリュームへの
READアクセスが必要です。 - 専用アクセス モード (以前のシングル ユーザー アクセス モード) では、接続を使用するには、接続の所有者または管理者である必要があります。
- SSL 証明書はサポートされていません。
- フォーリンカタログはJDBC接続ではサポートされていません。
認証
- このコネクタは静的認証情報とOAuthによるマシン間通信に対応しています。Unity Catalog の資格情報またはサービス資格情報をサポートしていません。
ネットワーキング
- ターゲット データベース システムと Databricks ワークスペースを同じ VPC に配置することはできません。
ネットワーク接続
コンピュート リソースからターゲット データベース システムへのネットワーク接続が必要です。 一般的なネットワークのガイダンスについては、「レイクハウスフェデレーションのネットワークに関する推奨事項」を参照してください。
Classic コンピュート: 標準および専用クラスター
Databricks VPC は、Spark クラスターのみを許可するように構成されています。別のインフラストラクチャに接続するには、ターゲット データベース システムを別の VPC に配置し、VPC ピアリングを使用します。VPC ピアリングが確立されたら、クラスターまたはウェアハウス上のconnectionTest UDF との接続を確認します。
Databricks ワークスペースとターゲット データベース システムが同じ VPC 内にある場合、Databricks では次のいずれかを推奨します。
- サーバレスコンピュートを使用します。
- ポート 80 および 443 経由の TCP および UDP トラフィックを許可するようにターゲット データベースを構成し、接続でこれらのポートを指定します。
接続テスト
Databricksコンピュートとデータベース システムの間の接続をテストするには、次のUDFを使用します。
CREATE OR REPLACE TEMPORARY FUNCTION connectionTest(host string, port string) RETURNS string LANGUAGE PYTHON AS $$
import subprocess
try:
command = ['nc', '-zv', host, str(port)]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return str(result.returncode) + "|" + result.stdout.decode() + result.stderr.decode()
except Exception as e:
return str(e)
$$;
SELECT connectionTest('<database-host>', '<database-port>');
FAQ
以下のよくある質問では、JDBC接続の述語プッシュダウンの動作について説明します。
JDBC は述語プッシュダウンをサポートしていますか?
はい。フィルターはデフォルトでリモートデータベースにプッシュダウンされます。これは、Spark Data Source API(format('jdbc'))とremote_query SQL関数の両方についてです。プッシュできる述語はJDBCドライバーと方言に依存するため、クエリーに対してEXPLAINを実行し、物理プランを検査して、どのフィルターがソースにプッシュされているかを確認してください。remote_query SQL関数では、pushdown.filters.enabledなどのオプションを使用して、特定のプッシュダウン(フィルター、制限、オフセット、集計)を制御できます。すべてデフォルトで有効になっています。
述語プッシュダウンは、テーブル統計をクエリーオプティマイザーに公開することとは異なります。JDBCおよびPySparkデータソースは、述語がプッシュダウンされるかどうかにかかわらず、操作の順序を選択するのに役立つ統計をクエリーオプティマイザーに公開しません。