メインコンテンツまでスキップ

SQL Server JDBC カタログ

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

JDBC Catalogの概要については、次を参照してください:JDBC Catalog Overview

使用上の注意

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

  • SQL Server 2012以降、またはAzure SQL Database。

  • SQL Serverデータベース用のJDBCドライバー。最新版または指定されたバージョンをMaven Repositoryからダウンロードできます。SQL Server 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 Server JDBCドライバーに渡される接続情報とパラメータを定義します。URLでサポートされるパラメータは、SQL Server JDBC Driver Documentationで提供されています。

接続セキュリティ

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

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

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

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

階層マッピング

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

DorisSQL Server
CatalogDatabase
DatabaseSchema
TableTable

カラム型マッピング

SQL Server TypeDoris TypeComment
bitboolean
tinyintsmallintSQLServerのtinyintは符号なしのため、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 Server 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 Server 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