适用于: SQL Server
Azure SQL 数据库
Azure Synapse Analytics
Analytics Platform System (PDW)
PolyBase 是 SQL Server 的数据虚拟化功能。
什么是 PolyBase?
使用 PolyBase,SQL Server 实例可以直接从 SQL Server、Oracle、Teradata、MongoDB、Hadoop 群集、Cosmos DB 和 S3 兼容的对象存储使用 T-SQL 查询数据,而无需单独安装客户端连接软件。 你还可以使用泛型 ODBC 连接器,通过第三方 ODBC 驱动程序连接到其他提供程序。 借助 PolyBase,T-SQL 查询可以将外部源中的数据连接到 SQL Server 实例中的关系表。
“使用 PolyBase 进行数据虚拟化”功能的一个重要用例是允许数据保留其原始位置和格式。 可以通过 SQL Server 实例虚拟化外部数据,以便可以对这些数据进行查询,如同 SQL Server 中的任何其他表一样。 此过程可以最大限度地减少对数据移动的 ETL 进程的需求。 此数据虚拟化方案可通过使用 PolyBase 连接器来实现。
支持的 SQL 产品和服务
PolyBase 对以下 Microsoft SQL 产品提供这些相同功能:
- SQL Server 2016 (13.x) 及更高版本 (Windows)
- SQL Server 2019 (15.x) 及更高版本(Windows 和 Linux)
- SQL Server 分析平台系统 (PDW)
- Azure Synapse Analytics(专用 SQL 池)
- Azure Synapse Analytics 中的数据虚拟化提供两种模式:PolyBase 和本机。 有关详细信息,请参阅通过 Synapse SQL 使用外部表。
注意
数据虚拟化还可用于Azure SQL 托管实例,范围是查询存储在 Azure Data Lake Storage (ADLS) Gen2 和 Azure Blob 存储中的文件中的外部数据。 有关详细信息,请参阅 使用 Azure SQL 托管实例进行数据虚拟化。
SQL Server 2025 (PolyBase 增强功能)
SQL Server 2025 (17.x) 预览版的新增功能 | Details |
---|---|
对 CSV、Parquet 和 Delta 的本机支持1 | 对于外部数据的 PolyBase 查询服务,不再需要将 OPENROWSET、CREATE EXTERNAL TABLE 或 CREATE EXTERNAL TABLE AS SELECT 与以下类型的外部数据配合使用:Parquet、Delta、Azure Blob 存储 (ABS)、Azure Data Lake Storage (ADLS) 或 S3 兼容的对象存储。 |
在 Linux 上使用通用 ODBC 数据源 | 有关详细信息,请参阅 配置 PolyBase 以使用 ODBC 泛型类型访问外部数据。 |
TDS 8.0 支持 | 将 Microsoft ODBC Driver 18 for SQL Server 用作外部数据源时,SQL Server 不支持 TDS 8.0。 |
1 在 SQL Server 2025(17.x) 预览版中,仍需要 PolyBase 查询服务才能与其他数据库连接。 例如:SQL Server、Oracle、DB2、Teradata、MongoDB 或 ODBC。
SQL Server 2022 PolyBase 增强功能
SQL Server 2022 (16.x) 的新增功能 | Details |
---|---|
S3 兼容的对象存储 | SQL Server 2022 (16.x) 使用 S3 REST API 添加新连接器,即 S3 兼容的对象存储。 可以同时使用 OPENROWSET 和 CREATE EXTERNAL TABLE 查询 S3 兼容对象存储中的数据文件。 |
某些连接器独立于 PolyBase 服务 | 与 S3 兼容的对象存储连接器 ADSL Gen2 和 Azure Blob 存储不再依赖于 PolyBase 服务。 PolyBase 服务仍必须运行才能支持与 Oracle、Teradata、MongoDB 和泛型 ODBC 的连接。 PolyBase 功能仍必须安装在 SQL Server 实例上。 |
Parquet 文件格式 | PolyBase 现在能够从存储在 S3 兼容对象存储上的 Parquet 文件中查询数据。 有关详细信息,请参阅使用 PolyBase 虚拟化 S3 兼容对象存储中的 parquet 文件。 |
增量表格式 | PolyBase 现在能够从存储在 S3 兼容对象存储、Azure 存储帐户 V2 和 Azure Data Lake Storage Gen2 上的增量表格式查询(只读)数据。 有关详细信息,请参阅使用 PolyBase 虚拟化 delta 表 |
Create External Table as Select (CETAS) | PolyBase 现在可以使用 CETAS 创建外部表,然后将 Transact-SQL SELECT 语句的结果并行导出到 Azure Data Lake Storage Gen2、Azure 存储帐户 V2 和 S3 兼容的对象存储。 有关详细信息,请参阅 CREATE EXTERNAL TABLE AS SELECT (CETAS)。 |
有关 SQL Server 2022(16.x)的更多新功能,请参阅 SQL Server 2022 中的新增功能。
提示
有关 SQL Server 2022 (16.x) 中 PolyBase 功能的教程,请参阅 SQL Server 2022 中的 PolyBase 入门。
PolyBase 连接器
PolyBase 功能提供与以下外部数据源的连接:
外部数据源 | 包含 PolyBase 的 SQL Server 2016-2019 | 包含 PolyBase 的 SQL Server 2022 (16.x) | APS PDW | Azure Synapse Analytics |
---|---|---|---|---|
Oracle、MongoDB、Teradata | 读取 | 读取 | 否 | 否 |
泛型 ODBC | 读取(仅限 Windows) | 读取(仅限 Windows) | 否 | 否 |
Azure 存储 | 读取/写入 | 读取/写入 | 读取/写入 | 读取/写入 |
Hadoop | 读取/写入 | 否 | 读取/写入 | 否 |
SQL Server | 读取 | 读取 | 否 | 否 |
S3 兼容的对象存储 | 否 | 读取/写入 | 否 | 否 |
- SQL Server 2022 (16.x) 不支持 Hadoop。
- SQL Server 2016 (13.x) 引入了 PolyBase,支持连接到 Hadoop 和 Azure Blob 存储。
- SQL Server 2019 (15.x) 引入了更多连接器,包括 SQL Server、Oracle、Teradata 和 MongoDB。
- SQL Server 2022 (16.x) 引入了 S3 兼容的存储连接器。
- SQL Server 2019 (15.x) 累积更新 19 引入了对 Oracle TNS 的支持。
- SQL Server 2022 (16.x) 累积更新 2 引入了对 Oracle TNS 的支持。
外部连接器的示例包括:
* 通过 SQL Server 2019,PolyBase 支持两个 Hadoop 提供程序:Hortonworks 数据平台 (HDP) 和 Cloudera 分布式 Hadoop (CDH)。 SQL Server 对 HDFS Cloudera (CDP) 和 Hortonworks (HDP) 外部数据源的支持已停用,并且不包含在 SQL Server 2022 (16.x) 及更高版本中。 有关详细信息,请参阅 Microsoft SQL Server 平台上的大数据选项。
要在 SQL Server 实例中使用 PolyBase,请执行以下操作:
- 在 Windows 上安装 PolyBase 或在 Linux 上安装 PolyBase。
- 从 SQL Server 2019 (15.x) 开始,如有必要,在 sp_configure 中启用 PolyBase。
- 创建外部数据源。
- 创建外部表。
Azure 集成
借助 PolyBase 的基础帮助,T-SQL 查询还可以从 Azure Blob 存储中导入和导出数据。 此外,借助 PolyBase,Azure Synapse Analytics 还可以从 Azure Data Lake Store 和 Azure Blob 存储中导入和导出数据。
为什么要使用 PolyBase?
PolyBase 允许将 SQL Server 实例中的数据与外部数据联接。 在 PolyBase 允许将数据联接到外部数据源之前,可以:
- 传输一半数据,这样所有数据都在一个位置。
- 查询两个数据源,然后编写自定义查询逻辑,以在客户端级别联接和集成数据。
PolyBase 允许你使用 Transact-SQL 联接数据。
PolyBase 不需要将额外的软件安装到 Hadoop 环境。 查询外部数据所用的 T-SQL 语法也是用于查询数据库表的语法。 PolyBase 实现的支持操作全都以透明方式发生。 查询作者不需要任何有关外部源的知识。
PolyBase 使用
PolyBase 支持 SQL Server 中的以下方案:
查询存储在 Azure Blob 存储中的数据。 Azure Blob 存储是一个方便存储供 Azure 服务使用的数据的位置。 PolyBase 使得使用 T-SQL 访问数据变得更加容易。
通过 SQL Server 实例或 PDW 查询 Hadoop 中存储的数据。 用户将数据存储在经济高效的分布式、可扩展系统中,例如 Hadoop 中。 PolyBase 使得使用 T-SQL 查询数据变得更加容易。
从 Hadoop、Azure Blob 存储或 Azure Data Lake Store 中导入数据。 通过从 Hadoop、Azure Blob 存储或 Azure Data Lake Store 导入数据到关系表,充分利用 Microsoft SQL 的列存储技术和分析功能,实现快速处理。 无需单独的 ETL 或导入工具。
将数据导出到 Hadoop、Azure Blob Storage 或 Azure Data Lake Store。 将数据存档到 Hadoop、Azure Blob Storage 或 Azure Data Lake Store,以实现经济高效的存储并保持在线以便访问。
与 BI 工具集成。 结合使用 PolyBase 和 Microsoft 的商业智能和分析堆栈,或使用任何与 SQL Server 兼容的第三方工具。
性能
对于可查询的文件数量或数据量没有硬性限制。 查询性能取决于数据量、数据格式、数据的组织方式,以及查询和联接的复杂性。
有关 PolyBase 性能指南和建议的更多信息,请参阅 SQL Server 的 PolyBase 中的性能注意事项。
升级到 SQL Server 2022
从 SQL Server 2022 (16.x) 开始,不再支持 Hortonworks 数据平台 (HDP) 和 Cloudera 分布式 Hadoop (CDH)。 由于这些更改,在迁移到 SQL Server 2022(16.x)之前,需要手动删除在以前版本的 SQL Server TYPE = HADOOP
上创建的 PolyBase 外部数据源或 Azure 存储。 删除外部数据源还需要删除关联的数据库对象,例如数据库范围的凭据和外部表。
必须根据以下参考表更改 Azure 存储连接器:
外部数据源 | 源 | 功能 |
---|---|---|
Azure Blob 存储 | wasb[s] | abs |
ADLS Gen 2 | abfs[s] | adls |
开始
在使用 PolyBase 之前,你必须在 Windows 上安装 PolyBase 或在 Linux 上安装 PolyBase,并在必要时在 sp_configure 中启用 PolyBase。
有关 PolyBase 功能的教程,请参阅 SQL Server 2022 中的 PolyBase 入门。
有关各种外部数据源的更多教程,请参阅:
其他平台上的数据虚拟化
其他平台也提供数据虚拟化功能: