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セクションでは、trustServerCertificate、hostNameInCertificate、trustStore、trustStorePasswordなどの他のパラメータについて詳しく説明されています。
階層マッピング
SQLServerをマッピングする際、DorisのDatabaseはSQL Serverの指定されたDatabase(jdbc_urlの<databaseName>パラメータ)配下のSchemaに対応します。DorisのDatabase配下のTableは、SQLServerのSchema配下のTablesに対応します。マッピング関係は以下の通りです:
| Doris | SQL サーバー |
|---|---|
| カタログ | Database |
| Database | Schema |
| Table | Table |
カラム型マッピング
| SQL サーバー タイプ | Doris タイプ | Comment |
|---|---|---|
| bit | boolean | |
| tinyint | smallint | SQLServerのtinyintはunsignedのため、Dorisのsmallintにマッピングされます |
| smallint | smallint | |
| int | int | |
| bigint | bigint | |
| real | float | |
| float | double | |
| money | decimal(19,4) | |
| smallmoney | decimal(10,4) | |
| decimal(P, S)/numeric(P, S) | decimal(P, S) | |
| date | date | |
| datetime/datetime2/smalldatetime | datetime(S) | |
| char/varchar/text/nchar/nvarchar/ntext | string | |
| time/datetimeoffset | string | |
| timestamp | string | バイナリデータの16進表現を表示し、実際の意味はありません |
| image/binary/varbinary | varbinary | Catalogのenable.mapping.varbinaryプロパティによって制御されます(4.0.2以降でサポート)。デフォルトはfalseでstringにマッピングされます。trueの場合はvarbinary型にマッピングされます。 |
| other | UNSUPPORTED |
よくある問題
-
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"
-
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がデフォルトで無効になっています。
解決方法は以下の通りです:
-
SQL ServerでTLS 1.2を有効にする。参照:SQL サーバー TLS 1.2 Support
-
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