适用于: 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 兼容的对象存储查询具有 Transact-SQL(T-SQL)的数据,而无需单独安装客户端连接软件。 你还可以使用泛型 ODBC 连接器,通过第三方 ODBC 驱动程序连接到其他提供程序。 借助 PolyBase,T-SQL 查询可以将外部源中的数据连接到 SQL Server 实例中的关系表。
PolyBase 还支持查询半结构化和结构化基于文件的数据格式,例如 CSV、Parquet、JSON 和 Delta Lake 文件。 这样就可以将基于文件的数据无缝集成到 T-SQL 工作流中。
“使用 PolyBase 进行数据虚拟化”功能的一个重要用例是允许数据保留其原始位置和格式。 可以通过 SQL Server 实例虚拟化外部数据,以便可以对这些数据进行查询,如同 SQL Server 中的任何其他表一样。 此过程可以最大限度地减少对数据移动的 ETL 进程的需求。 此数据虚拟化方案可通过使用 PolyBase 连接器来实现。
支持的 SQL 产品和服务
PolyBase 对以下 Microsoft SQL 产品提供这些相同功能:
SQL Server 2016 (13.x) 及更高版本 (Windows)
SQL Server 2019 (15.x) 及更高版本(Windows 和 Linux)
Azure SQL 托管实例,有关详细信息,请查看 Azure SQL 托管实例的数据虚拟化
有关详细信息,请参阅 Azure SQL 数据库的数据虚拟化(预览版)
SQL Server 分析平台系统 (PDW)
Azure Synapse Analytics (适用于专用 SQL 池)
- Azure Synapse Analytics 中的数据虚拟化提供两种模式:PolyBase 和本机。 有关详细信息,请参阅通过 Synapse SQL 使用外部表。
SQL Server 2025 (PolyBase 增强功能)
| SQL Server 2025 (17.x) 预览版的新增功能 | Details |
|---|---|
| 对 CSV、Parquet 和 Delta 的本机支持1 | 不再需要 OPENROWSET使用 PolyBase 查询服务进行外部数据安装, CREATE EXTERNAL TABLE或者 CREATE EXTERNAL TABLE AS SELECT 与以下类型的外部数据一起使用:Parquet、Delta、Azure Blob 存储(ABS)、Azure Data Lake Storage(ADLS)或 S3-Compatible 对象存储。 |
| 在 Linux 上使用通用 ODBC 数据源 | 有关详细信息,请参阅 配置 PolyBase 以使用 ODBC 泛型类型访问外部数据。 |
| TDS 8.0 支持 | 在 Windows 上使用适用于 SQL Server 的 Microsoft ODBC 驱动程序的功能时,TDS 8.0 可用作 外部数据源的 SQL Server。 查看 SQL Server 2025 预览版中的中断性变更。 |
| 托管身份 | 托管标识适用于 Azure VM 上由 Azure Arc 和 SQL Server 2025 启用的 SQL Server。 |
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 表 |
| 创建外部表作为 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 的支持。
外部连接器的示例包括:
1 PolyBase 通过 SQL Server 2019 支持两个 Hadoop 提供程序,即 Hortonworks 数据平台(HDP)和 Cloudera Distributed 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 中的以下方案:
- 无缝数据访问: 使用 T-SQL 查询其他 RDBM 或外部文件(如 CSV、Parquet 和 Delta Lake 表),就像它们是本机表一样。
- 卸载冷数据: 同时使它易于访问。
- 提高工作效率: 减少集成和分析来自多个源的数据所需的时间和工作量。
- 成本效益: 最大程度地减少与传统数据集成方法相关的数据复制和存储成本的需求。
- 实时见解: 启用实时数据查询和见解,而不会因数据移动或同步而导致延迟。
- 安全: 使用 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 入门。
有关各种外部数据源的更多教程,请参阅:
- Hadoop
- Azure Blob 存储
- SQL Server
- Oracle
- Teradata
- MongoDB
- ODBC 泛型类型
- S3 兼容的对象存储
- CSV 文件
- Parquet 文件
- Delta 表
其他平台上的数据虚拟化
其他平台也提供数据虚拟化功能: