配置 PolyBase 以访问 SQL Server 中的外部数据

适用于:SQL Server

本文介绍如何使用 SQL Server 实例上的 PolyBase 来查询另一个 SQL Server 实例中的外部数据。

先决条件

如果尚未安装 PolyBase,请参阅 PolyBase 安装。 这篇安装文章介绍了安装的先决条件。 安装后,还应确保启用 PolyBase

SQL Server 外部数据源使用 SQL 身份验证。

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

配置 SQL Server 外部数据源

若要查询 SQL Server 数据源中的数据,必须创建外部表以引用外部数据。 本节提供用于创建这些外部表的示例代码。

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

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

  1. 创建数据库范围凭据以访问 SQL Server 源。 下面的示例使用 IDENTITY = 'username'SECRET = 'password' 创建外部数据源的凭据。

    CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials
    WITH IDENTITY = 'username', SECRET = 'password';
    

    重要

    用于 PolyBase 的 SQL ODBC 连接器仅支持基本身份验证,不支持 Kerberos 身份验证。

  2. 使用 CREATE EXTERNAL DATA SOURCE 创建外部数据源。 下面的示例:

    • 创建名为 SQLServerInstance 的外部数据源。
    • 标识外部数据源 (LOCATION = '<vendor>://<server>[:<port>]')。 在示例中,它指向 SQL Server 的默认实例。
    • 标识是否应将计算推送到源 (PUSHDOWN)。 PUSHDOWN 默认设置为 ON

    最后,该示例使用先前创建的凭据。

    CREATE EXTERNAL DATA SOURCE SQLServerInstance
        WITH ( LOCATION = 'sqlserver://SqlServer',
        PUSHDOWN = ON,
        CREDENTIAL = SQLServerCredentials);
    
  3. 使用 CREATE EXTERNAL TABLE 创建外部表 该语句需要排序规则并且位置需要三部分表示法 (<database>.<schema>.<table>)。

    CREATE EXTERNAL TABLE DatabasesExternal (
        name VARCHAR(128) COLLATE SQL_Latin1_General_CP1_CI_AS)
      WITH (LOCATION = 'master.sys.databases',
      DATA_SOURCE = SQLServerInstance);
    
  4. 也可在外部表上创建统计信息。

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

  CREATE STATISTICS statistics_name ON customer (C_CUSTKEY)
  WITH FULLSCAN;

重要

创建外部数据源后,可以使用 CREATE EXTERNAL TABLE 命令在该数据源上创建可查询的表。

SQL Server 连接器兼容类型

还可以利用 SQL Server (sqlserver://) 连接器访问 Azure SQL 数据库。 若要完成此任务,请执行前面列出的相同步骤。 确保数据库范围的凭据、服务器地址、端口和位置字符串与要连接的 Azure SQL 数据库数据源的相应内容相关联。

后续步骤

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

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