适用于:SQL Server
从 SQL Server 2019 开始,PolyBase 允许使用 ODBC 连接器连接到与 ODBC 兼容的数据源。 从 SQL Server 2025 (17.x) 预览版开始,此功能在 Linux 上可用。
本文演示如何使用 ODBC 数据源创建配置连接。 提供的指导使用一个特定 ODBC 驱动程序作为示例。 请向 ODBC 提供程序获取具体的示例。 参考数据源的 ODBC 驱动程序文档来确定适当的连接字符串选项。 本文中的示例可能不适用于任何特定的 ODBC 驱动程序。
先决条件
注意
在 SQL Server 2022(16.x)和早期版本中,此功能需要 Windows 上的 SQL Server。
必须为 SQL Server 实例 PolyBase 安装安装和启用 PolyBase。
在创建数据库范围的凭据之前,必须创建 主密钥。
安装 ODBC 驱动程序
按照操作系统的安装说明进行操作。
SQL Server 2025(17.x)预览版对于 PolyBase sqlserver
数据源,默认使用 Microsoft 的适用于 SQL Server 的 ODBC 驱动程序版本 18。 此驱动程序支持 TDS 8.0,包括各种更新、功能和一些影响性变更。 若要使用 TDS 8.0,必须使用新的加密选项,并在服务器上安装受信任的证书。
有关 SQL Server Microsoft ODBC 驱动程序版本 18 的详细信息,请参阅:
有关 SQL Server TDS 8.0 支持的详细信息,请参阅 TDS 8.0。
在每个 PolyBase 节点上下载并安装要连接的数据源的 ODBC 驱动程序。 正确安装驱动程序后,从“ODBC 数据源管理器”查看和测试该驱动程序。
在上一示例中,驱动程序的名称被红色圈出。 创建外部数据源时,请使用此名称。
重要
若要提高查询性能,请启用连接池。 可通过“ODBC 数据源管理器”完成此操作。
在 SQL Server 中创建从属对象
若要使用 ODBC 数据源,必须先创建几个对象来完成配置。
此部分中使用了以下 Transact-SQL 命令:
创建数据库范围凭据以访问 ODBC 数据源。
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', SECRET = '<password>';
例如,以下示例创建一个名为
credential_name
的凭据,其标识为username
。 使用复杂的密码替换<password>
。CREATE DATABASE SCOPED CREDENTIAL credential_name WITH IDENTITY = 'username', SECRET = '<password>';
使用 CREATE EXTERNAL DATA SOURCE 创建外部数据源。
CREATE EXTERNAL DATA SOURCE [<external_data_source_name>] WITH ( LOCATION = 'odbc://<ODBC server address>[:<port>]', CONNECTION_OPTIONS = 'Driver={<Name of installed driver>}; ServerNode = <name of server address>:<Port>', -- PUSHDOWN = [ON] | OFF, CREDENTIAL = [<credential_name>] );
以下的示例创建一个外部数据源:
- 命名为
external_data_source_name
- 位于 ODBC
SERVERNAME
和端口4444
- 与
CData ODBC Driver For SAP 2015
连接 - 这是在安装 ODBC 驱动程序下创建的驱动程序 - 在
ServerNode
sap_server_node
端口5555
上 - 配置进行下推到服务器的处理(
PUSHDOWN = ON
) - 使用
credential_name
凭据
CREATE EXTERNAL DATA SOURCE external_data_source_name WITH ( LOCATION = 'odbc://SERVERNAME:4444', PUSHDOWN = ON, CONNECTION_OPTIONS = 'Driver={CData ODBC Driver For SAP 2015}; ServerNode = sap_server_node:5555', CREDENTIAL = credential_name );
- 命名为
创建外部表
一旦创建了从属对象,就可以使用 T-SQL 创建外部表。
此部分中使用了以下 Transact-SQL 命令:
创建一个或多个外部表。
创建外部表。 需要引用以前使用
DATA_SOURCE
参数创建的外部数据源,并将源表指定为LOCATION
. 无需引用所有列,但需要确保正确映射类型。CREATE EXTERNAL TABLE [<your_table_name>] ( [<col1_name>] DECIMAL (38) NOT NULL, [<col2_name>] DECIMAL (38) NOT NULL, [<col3_name>] CHAR COLLATE Latin1_General_BIN NOT NULL ) WITH ( DATA_SOURCE = [<external_data_source_name>], LOCATION = '<sap_table_name>' );
注意
请注意,您可以利用此外部数据源为所有外部表重复利用依赖对象。
可选:在外部表上创建统计信息。
为了获得最佳查询性能,建议在外部表列上创建统计信息,尤其是用于联接、筛选和聚合的统计信息。
CREATE STATISTICS statistics_name ON contact(FirstName) WITH FULLSCAN;