通过 SQL Server 中的 PolyBase 进行数据虚拟化

适用于: SQL Server Not supported. 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 Analytics Platform System (PDW)
  • Azure Synapse Analytics(专用 SQL 池)

注意

数据虚拟化还可用于Azure SQL 托管实例,范围是查询存储在 Azure Data Lake Storage (ADLS) Gen2 和 Azure Blob 存储中的文件中的外部数据。 有关详细信息,请访问 Azure SQL 托管实例的数据虚拟化

SQL Server 2022 PolyBase 增强功能

SQL Server 2022 (16.x) 的新增功能 详细信息
S3 兼容的对象存储 SQL Server 2022 (16.x) 使用 S3 REST API 添加新连接器,即 S3 兼容的对象存储。 可以同时使用 OPENROWSETCREATE 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 上的增量表格式查询(只读)数据。 有关详细信息,请参阅虚拟化增量表格式
Create External Table as Select (CETAS) PolyBase 现在可以使用 CETAS 创建外部表,然后将 Transact-SQL SELECT 语句的结果并行导出到 Azure Data Lake Storage Gen2、Azure 存储帐户 V2 和 S3 兼容的对象存储。 有关详细信息,请参阅 CREATE EXTERNAL TABLE AS SELECT (Transact-SQL)

有关 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,请执行以下操作:

  1. 在 Windows 上安装 PolyBase在 Linux 上安装 PolyBase
  2. 从 SQL Server 2019 (15.x) 开始,如有必要,在 sp_configure 中启用 PolyBase
  3. 创建外部数据源
  4. 创建外部表

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 存储或 Azure Data Lake Store。 将数据存档到 Hadoop、Azure Blob 存储或 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 或 Azure 存储创建的 PolyBase 外部数据源。 删除外部数据源还需要删除关联的数据库对象,例如数据库范围的凭据和外部表。

必须根据以下参考表更改 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 入门

有关各种外部数据源的更多教程,请参阅:

其他平台上的数据虚拟化

其他平台也提供数据虚拟化功能: