配置 PolyBase 以使用 ODBC 泛型类型访问外部数据

适用于:SQL Server

从 SQL Server 2019 开始,PolyBase 允许使用 ODBC 连接器连接到与 ODBC 兼容的数据源。 从 SQL Server 2025 (17.x) 预览版开始,此功能在 Linux 上可用。

本文演示如何使用 ODBC 数据源创建配置连接。 提供的指导使用一个特定 ODBC 驱动程序作为示例。 请向 ODBC 提供程序获取具体的示例。 参考数据源的 ODBC 驱动程序文档来确定适当的连接字符串选项。 本文中的示例可能不适用于任何特定的 ODBC 驱动程序。

先决条件

注意

在 SQL Server 2025(17.x) 预览版之前,此功能需要 Windows 上的 SQL Server。

  • 必须为 SQL Server 实例 PolyBase 安装安装和启用 PolyBase。

  • 在创建数据库范围的凭据之前,必须创建 主密钥

安装 ODBC 驱动程序

按照操作系统的安装说明进行操作。

在每个 PolyBase 节点上下载并安装要连接的数据源的 ODBC 驱动程序。 正确安装驱动程序后,从“ODBC 数据源管理器”查看和测试该驱动程序

PolyBase 横向扩展组的屏幕截图。

在上一示例中,驱动程序的名称被红色圈出。 创建外部数据源时,请使用此名称。

重要

若要提高查询性能,请启用连接池。 可通过“ODBC 数据源管理器”完成此操作

在 SQL Server 中创建从属对象

若要使用 ODBC 数据源,必须先创建几个对象来完成配置。

此部分中使用了以下 Transact-SQL 命令:

  1. 创建数据库范围凭据以访问 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>';
    
  2. 使用 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 驱动程序下创建的驱动程序
    • ServerNodesap_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 命令:

  1. 创建一个或多个外部表。

    创建外部表。 需要引用以前使用 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>'
    );
    

    注意

    请注意,您可以利用此外部数据源为所有外部表重复利用依赖对象。

  2. 可选:在外部表上创建统计信息。

    为了获得最佳查询性能,建议在外部表列上创建统计信息,尤其是用于联接、筛选和聚合的统计信息。

    CREATE STATISTICS statistics_name ON contact(FirstName) WITH FULLSCAN;