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

适用于:SQL Server

从 SQL Server 2019 开始,PolyBase 允许使用 ODBC 连接器连接到与 ODBC 兼容的数据源。

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

先决条件

注意

此功能需要 Windows 上的 SQL Server。

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

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

安装 ODBC 驱动程序

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

PolyBase scale-out groups

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

重要

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

在 SQL Server 中创建从属对象

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

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

  1. 创建数据库范围凭据以访问 ODBC 数据源。

    CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
    

    例如,以下示例创建一个名为 credential_name 的凭据,具有一个 username 标识和一个复杂密码。

    CREATE DATABASE SCOPED CREDENTIAL credential_name WITH IDENTITY = 'username', Secret = 'BycA4ZjrE#*2W%!';
    
  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',
    CONNECTION_OPTIONS = 'Driver={CData ODBC Driver For SAP 2015};
    ServerNode = sap_server_node:5555',
    PUSHDOWN = ON,
    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 (
      LOCATION='<sap_table_name>',
      DATA_SOURCE= [<external_data_source_name>]
      )
      ;
    

    注意

    请注意,可以使用此外部数据源对所有外部表重复使用从属对象。

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

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

    CREATE STATISTICS statistics_name ON contact (FirstName) WITH FULLSCAN; 
    

后续步骤

若要了解有关 PolyBase 的详细信息,请参阅 SQL Server PolyBase 的概述

有关为各种数据源创建外部数据源和外部表的更多教程,请参阅 PolyBase Transact-SQL 参考