Doris JDBC Catalog 支持通過標準 JDBC 接口連接 SQL Server 數據庫。本文檔介紹如何配置 SQL Server 數據庫連接。
使用須知?
要連接到 SQL Server 數據庫,您需要
-
SQL Server 2012 或更高版本,或 Azure SQL 數據庫。
-
SQL Server 數據庫的 JDBC 驅動程序,您可以從?Maven 倉庫下載最新或指定版本的 SQL Server JDBC 驅動程序。推薦使用 SQL Server JDBC Driver 11.2.x 及以上版本。
-
Doris 每個 FE 和 BE 節點和 SQL Server 服務器之間的網絡連接,默認端口為 1433。
連接 SQL Server?
CREATE CATALOG sqlserver PROPERTIES ("type"="jdbc","user"="root","password"="secret","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 驅動程序的連接信息和參數。?SQL Server JDBC 驅動程序文檔中提供了 URL 支持的參數。
連接安全?
JDBC 驅動程序以及連接器自動使用傳輸層安全性 (TLS) 加密和證書驗證。這需要在 SQL Server 數據庫主機上配置合適的 TLS 證書。
如果您沒有建立必要的配置,您可以使用 encrypt 屬性禁用連接字符串中的加密:
"jdbc_url"="jdbc:sqlserver://<host>:<port>;databaseName=<databaseName>;encrypt=false"
SQL Server JDBC 驅動程序文檔的 TLS 部分詳細介紹了 trustServerCertificate、hostNameInCertificate、trustStore 和 trustStorePassword 等其他參數。
層級映射?
映射 SQLServer 時,Doris 的一個 Database 對應于 SQL Server 中指定 Database(jdbc_url
?參數中的?<databaseName>
)下的一個 Schema。而 Doris 的 Database 下的 Table 則對應于 SQLServer 中,Schema 下的 Tables。即映射關系如下:
Doris | SQLServer |
---|---|
Catalog | Database |
Database | Schema |
Table | Table |
類型映射?
SQL Server 到 Doris 類型映射?
SQL Server Type | Doris Type | Comment |
---|---|---|
bit | BOOLEAN | |
tinyint | SMALLINT | SQLServer 的 tinyint 是無符號數,所以映射為 Doris 的 SMALLINT |
smallint | SMALLINT | |
int | INT | |
bigint | BIGINT | |
real | FLOAT | |
float | DOUBLE | |
money | DECIMAL(19,4) | |
smallmoney | DECIMAL(10,4) | |
decimal/numeric | DECIMAL | |
date | DATE | |
datetime/datetime2/smalldatetime | DATETIMEV2 | |
char/varchar/text/nchar/nvarchar/ntext | STRING | |
time/datetimeoffset | STRING | |
timestamp | STRING | 讀取二進制數據的十六進制顯示,無實際意義 |
Other | UNSUPPORTED |
查詢優化?
謂詞下推?
當執行類似于?where dt = '2022-01-01'
?這樣的查詢時,Doris 能夠將這些過濾條件下推到外部數據源,從而直接在數據源層面排除不符合條件的數據,減少了不必要的數據獲取和傳輸。這大大提高了查詢性能,同時也降低了對外部數據源的負載。
行數限制?
如果在查詢中帶有 limit 關鍵字,Doris 會將 limit 轉義為 SQL Server 的?TOP
?語法,以減少數據傳輸量。
轉義字符?
Doris 會在下發到 SQL Server 的查詢語句中,自動在字段名與表名上加上轉義符:([]),以避免字段名與表名與 SQL Server 內部關鍵字沖突。
常見問題?
-
連接 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_url
?把 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 Server TLS 1.2 支持
- 啟用 JDK 的 TLS 1.0。
vim ${JAVA_HOME}/lib/security/java.security #找到這段 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#刪掉其中的 TLSv1, TLSv1.1 , 改成下面這樣即可 jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, anon, NULL, \ include jdk.disabled.namedCurves