关于PolyBase的常见问题

适用于:SQL Server 2016 (13.x) 及更高版本

PolyBase 与链接服务器

下表主要说明了 PolyBase 和 链接服务器之间的功能差异:

PolyBase 链接的服务器
数据库范畴内的对象 实例范围的对象
使用 ODBC 驱动程序 使用 OLE DB 提供者
支持对所有数据源执行只读操作,并写入某些外部数据源 支持读写操作
通过单个连接对远程数据源的查询可以进行横向扩展 通过单个连接对远程数据源进行的查询无法横向扩展
支持谓词下推 支持谓词下推
可用性组不需要单独配置 可用性组中的每个实例均需要单独配置
仅基本身份验证 基础认证与综合认证
适用于处理大量行的分析查询 适用于返回单行或少量行的 OLTP 查询
使用外部表的查询不能参与分布式事务 分布式查询可以参与分布式事务

SQL Server 2022 中的 PolyBase 有哪些新增功能?

SQL Server 2022(16.x)支持通过S3 REST API存储在Azure 存储 Account v2、Azure Data Lake Storage Gen2或任何兼容S3的对象存储上的CSV、Parquet和Delta文件,无论是本地还是云端。

SQL Server 2022(16.x)支持CREATE EXTERNAL TABLE AS SELECT(CETAS),以及命令如 OPENROWSET、( CREATE EXTERNAL TABLE CET)和 T-SQL 增强功能。

SQL Server 2022(16.x)不支持Hadoop外部数据源。

SQL Server 2022(16.x)累积更新2引入了对Oracle TNS文件的支持。 有关详细信息和示例,请参阅 CREATE EXTERNAL DATA SOURCE CONNECTION_OPTIONS

欲了解更多信息,请参阅《SQL Server 2022 的 PolyBase 数据虚拟化》及 SQL Server 2022 PolyBase 增强内容的评测。

SQL Server 2019 中的 PolyBase 有哪些新增功能?

SQL Server 2019(15.x)中的PolyBase可以读取多个来源的数据。 你可以将这些外部数据源的数据作为外部表存储在你的 SQL Server 实例上。 PolyBase 还支持对这些外部数据源进行下推计算(不包括 ODBC 泛型类型)。

兼容的数据源

  • SQL Server
  • Oracle
  • Teradata
  • MongoDB
  • 兼容的 ODBC 泛型类型

SQL Server 2019(15.x)累积更新19引入了对Oracle TNS文件的支持。 有关详细信息和示例,请参阅 CREATE EXTERNAL DATA SOURCE CONNECTION_OPTIONS

Note

PolyBase 可以通过第三方 ODBC 驱动程序连接到外部数据源。 PolyBase 不包含这些驱动,它们可能无法按预期工作。 有关详细信息,请参阅配置 PolyBase 以使用 ODBC 泛型类型访问外部数据

我可以指定哪些 CONNECTION_OPTIONS 来连接第三方数据源?

参阅CREATE EXTERNAL DATA SOURCE CONNECTION_OPTIONS,了解 SQL Server、Oracle、Teradata、Cosmos DB 的 MongoDB API 以及通用 ODBC 数据提供程序的受支持连接选项。

如何查看 PolyBase 下推计算的远程查询执行计划?

你可以根据 SQL Server 版本的不同,使用不同的方法查看远程查询执行计划。 欲了解更多信息,请参见 PolyBase故障排除——查看PolyBase查询计划

如何判断是否正在进行 PolyBase 下推计算?

有关详细信息,请参阅如何判断是否发生了外部下推

Azure SQL 数据库是否支持 Polybase?

不能,但你可以使用 OPENROWSET 函数查询 Azure Blob 存储 中文件里的数据,或者使用 CREATE EXTERNAL TABLE 从 Synapse Analytics 中的无服务器 SQL 池读取数据。 有关详细信息,请参阅 Azure SQL 可以使用 Synapse SQL 外部表读取 Azure Data Lake 存储文件

Azure SQL 托管实例是否支持 PolyBase?

Azure SQL 托管实例具有自己的数据虚拟化功能,可将 Azure Data Lake Storage (ADLS) 和 Azure Blob 存储作为数据源。 有关详细信息,请参阅 Azure SQL 托管实例的数据虚拟化

对于 PolyBase,我应该允许哪些端口通过防火墙?

PolyBase 本身不需要打开任何其他端口,但在使用 PolyBase 横向扩展组时除外。 没有扩展组,PolyBase服务不需要任何防火墙规则。

在 Windows 服务器上,PolyBase 在 SQL Server 配置管理器 的 TCP/IP 设置 IPAll 部分中使用 SQL Server 实例所使用的端口。 更多信息请参见TCP/IP属性(IP地址标签页)。 在 Linux 服务器上,PolyBase 使用该 network.tcpport 设置。 有关详细信息,请参阅 TCP 端口

对于多台 Windows 服务器上的 PolyBase 横向扩展组,请参阅下一个问题中的端口信息。

不过,你必须允许其他端口与PolyBase使用的各种外部数据源通信。 请参阅 ODBC 配置、Azure 资源配置或特定数据源文档。 例如:

源平台 Reference
Microsoft SQL Server SQL Server 使用的端口
Hortonworks HDP 管理 HDFS
Cloudera CDH CDH 组件使用的端口

PolyBase 横向扩展组使用哪些端口?

默认情况下,PolyBase 数据移动服务通过 TCP 16450-16460 端口范围(通常为 16450-1645)以及端口 17001 连接到横向扩展组的头节点。 PolyBase只在配置扩展组时使用这些端口,因此允许通过服务器防火墙使用。 安装该功能时,SQL Server 安装程序会自动创建一条允许这些端口的本地防火墙规则。 有关详细信息,请参阅在 Windows 上配置 PolyBase 横向扩展组

Note

SQL Server 2022(16.x)中已移除 SQL Server PolyBase 横向扩展组。