メインコンテンツまでスキップ
バージョン: 4.x

SQL サーバー JDBC カタログ

Doris JDBC Catalogは、標準のJDBCインターフェースを通じてSQL Serverデータベースへの接続をサポートしています。このドキュメントでは、SQL Serverデータベース接続の設定方法について説明します。

JDBC Catalogの概要については、こちらを参照してください: JDBC カタログ 概要

使用上の注意

SQL Serverデータベースに接続するには、以下が必要です

  • SQL サーバー 2012以降、またはAzure SQL Database。

  • SQL ServerデータベースのJDBCドライバー。最新版または指定されたバージョンをMaven Repositoryからダウンロードできます。SQL サーバー JDBC Driver 11.2.x以上の使用を推奨します。

  • DorisのFEおよびBEノードとSQL Serverサーバー間のネットワーク接続。デフォルトポートは1433です。

SQL Serverへの接続

CREATE CATALOG sqlserver_catalog PROPERTIES (
'type' = 'jdbc',
'user' = 'username',
'password' = 'pwddd',
'jdbc_url' = 'jdbc:sqlserver://<host>:<port>;databaseName=<databaseName>;encrypt=false',
'driver_url' = 'mssql-jdbc-11.2.3.jre8.jar',
'driver_class' = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
)

jdbc_urlは、SQL サーバー JDBCドライバーに渡される接続情報とパラメータを定義します。URLでサポートされているパラメータは、SQL サーバー JDBC Driver Documentationで提供されています。

Connection Security

JDBCドライバーとコネクタは、Transport Layer Security (TLS) 暗号化と証明書検証を自動的に使用します。これには、SQL Serverデータベースホスト上で適切なTLS証明書を設定する必要があります。

必要な設定が確立されていない場合は、encryptプロパティを使用して接続文字列で暗号化を無効にできます:

'jdbc_url' = 'jdbc:sqlserver://<host>:<port>;databaseName=<databaseName>;encrypt=false'

SQL サーバー JDBC Driver DocumentationのTLSセクションでは、trustServerCertificatehostNameInCertificatetrustStoretrustStorePasswordなどの他のパラメータについて詳しく説明されています。

階層マッピング

SQLServerをマッピングする際、DorisのDatabaseはSQL Serverの指定されたDatabase(jdbc_url<databaseName>パラメータ)配下のSchemaに対応します。DorisのDatabase配下のTableは、SQLServerのSchema配下のTablesに対応します。マッピング関係は以下の通りです:

DorisSQL サーバー
カタログDatabase
DatabaseSchema
TableTable

カラム型マッピング

SQL サーバー タイプDoris タイプComment
bitboolean
tinyintsmallintSQLServerのtinyintはunsignedのため、Dorisのsmallintにマッピングされます
smallintsmallint
intint
bigintbigint
realfloat
floatdouble
moneydecimal(19,4)
smallmoneydecimal(10,4)
decimal(P, S)/numeric(P, S)decimal(P, S)
datedate
datetime/datetime2/smalldatetimedatetime(S)
char/varchar/text/nchar/nvarchar/ntextstring
time/datetimeoffsetstring
timestampstringバイナリデータの16進表現を表示し、実際の意味はありません
image/binary/varbinaryvarbinaryCatalogのenable.mapping.varbinaryプロパティによって制御されます(4.0.2以降でサポート)。デフォルトはfalsestringにマッピングされます。trueの場合はvarbinary型にマッピングされます。
otherUNSUPPORTED

よくある問題

  1. SQL Serverへの接続時の証明書認証例外

    SQLServerException: The driver could not establish a secure connection to SQL サーバー by using Secure Sockets Layer (SSL) encryption.
    Error: "sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
    unable to find valid certification path to requested target". ClientConnectionId:a92f3817-e8e6-4311-bc21-7c66

Catalogを作成する際、JDBC接続文字列の末尾にencrypt=falseを追加できます。例:"jdbc_url" = "jdbc:sqlserver://127.0.0.1:1433;DataBaseName=doris_test;encrypt=false"

  1. SQL Serverへの接続時のTLS例外

    The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]

これは、SQL ServerとJDBCクライアント間のTLSプロトコルバージョンが一致しないためです。接続先のSQL ServerはTLS 1.0のみをサポートしていますが、JDBCクライアントが配置されているJAVA環境では、TLS 1.0がデフォルトで無効になっています。

解決方法は以下の通りです:

  1. SQL ServerでTLS 1.2を有効にする。参照:SQL サーバー TLS 1.2 Support

  2. JDKでTLS 1.0を有効にする。

vim ${JAVA_HOME}/lib/security/java.security
# Find this section
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves

# Remove TLSv1, TLSv1.1, change it to the following
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, anon, NULL, \
include jdk.disabled.namedCurves