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
1. CREATE CATALOG sqlserver PROPERTIES (
2. "type"="jdbc",
3. "user"="root",
4. "password"="secret",
5. "jdbc_url" = "jdbc:sqlserver://<host>:<port>;databaseName=<databaseName>;encrypt=false",
6. "driver_url" = "mssql-jdbc-11.2.3.jre8.jar",
7. "driver_class" = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
8. )
备注
jdbc_url 定义要传递给 SQL Server JDBC 驱动程序的连接信息和参数。 SQL Server JDBC 驱动程序文档中提供了 URL 支持的参数。
连接安全
JDBC 驱动程序以及连接器自动使用传输层安全性 (TLS) 加密和证书验证。这需要在 SQL Server 数据库主机上配置合适的 TLS 证书。
如果您没有建立必要的配置,您可以使用 encrypt 属性禁用连接字符串中的加密:
1. "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 |
查询优化
统计信息
Doris 会在 Catalog 中维护表的统计信息,以便在执行查询时能够更好地优化查询计划。
可以查看 外表统计信息 了解如何收集统计信息。
谓词下推
当执行类似于 where dt = '2022-01-01' 这样的查询时,Doris 能够将这些过滤条件下推到外部数据源,从而直接在数据源层面排除不符合条件的数据,减少了不必要的数据获取和传输。这大大提高了查询性能,同时也降低了对外部数据源的负载。
行数限制
如果在查询中带有 limit 关键字,Doris 会将 limit 转义为 SQL Server 的 TOP 语法,以减少数据传输量。
转义字符
Doris 会在下发到 SQL Server 的查询语句中,自动在字段名与表名上加上转义符:([]),以避免字段名与表名与 SQL Server 内部关键字冲突。
常见问题
- 读取 SQLServer 出现通信链路异常
1. ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.6)[CANCELLED][INTERNAL_ERROR]UdfRuntimeException: Initialize datasource failed:
2. CAUSED BY: SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
3. Error: "sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
4. 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"
