通过 PolyBase 引入数据虚拟化

适用于: 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 Analytics Platform System (PDW)
  • Azure Synapse Analytics

注意

Azure SQL 托管实例的预览中提供了使用 PolyBase 功能的数据虚拟化,其作用域为查询存储在 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 兼容的对象存储。 可以使用 OPENROWSETEXTERNAL TABLES 来查询 S3 兼容对象存储中的数据文件。
某些连接器独立于 PolyBase 服务 S3 兼容的对象存储连接器以及 ADSL Gen2 和 Azure Blob 存储不再依赖于 PolyBase 服务。 PolyBase 服务仍必须运行以支持与 Oracle、Teradata、MongoDB 和泛型 ODBC 的连接。 PolyBase 功能仍必须安装在 SQL Server 实例上。
Parquet 文件格式 PolyBase 现在能够从存储在 S3 兼容对象存储上的 Parquet 文件中查询数据。 有关详细信息,请参阅使用 PolyBase 在 S3 兼容的对象存储中虚拟化 parquet 文件
Delta 表格式 PolyBase 现在能够从存储在 S3 兼容对象存储、Azure 存储帐户 V2 和 Azure Data Lake Storage Gen2 上的 Delta 表格式查询 (只读) 数据。 有关详细信息,请参阅 虚拟化 Delta 表格式
创建外部表作为 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 虚拟化 Azure 存储中的 CSV 文件的示例,请参阅使用 PolyBase 虚拟化 CSV 文件

PolyBase 连接器

PolyBase 功能提供与以下外部数据源的连接:

外部数据源 包含 PolyBase 的 SQL Server 2016-2019 SQL Server 2022 (具有 PolyBase 的 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,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 兼容的第三方工具。

性能

  • 将计算推送到 Hadoop。 (仅适用于 SQL Server 2016 (13.x)、SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x)。) PolyBase 将一些计算推送到外部源,以优化总体查询。 查询优化器制定基于成本的决策,以在执行此操作将提升查询性能时将计算推送到 Hadoop。 查询优化器使用外部表上的统计来制定基于成本的决策。 推送计算会创建 MapReduce 作业并利用 Hadoop 的分布计算资源。 有关详细信息,请参阅 PolyBase 中的下推计算

  • 缩放计算资源。 (仅适用于 SQL Server 2016 (13.x)、SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x)。) 若要提高查询性能,可以使用 SQL Server PolyBase 横向扩展组。 这使并行数据可以在 SQL Server 实例和 Hadoop 节点之间传输,并为处理外部数据添加计算资源。

重要

Microsoft SQL Server PolyBase 横向扩展组即将停用。 SQL Server 2022 (16.x) 中,将从产品中删除横向扩展组功能。 PolyBase 数据虚拟化将在 SQL Server 中作为纵向扩展功能继续完全受支持。 有关详细信息,请参阅 Microsoft SQL Server 平台上的大数据选项

升级到 SQL Server 2022

从 2022 SQL Server 开始, (16.x) Hortonworks 数据平台 (HDP) 和 Cloudera 分布式 Hadoop (CDH) 不再受支持。 由于这些更改,在迁移到 SQL Server 2022 (16.x) 之前,需要手动删除使用 TYPE = HADOOP 或 Azure 存储的以前版本的 SQL Server 上创建的 PolyBase 外部数据源。 删除外部数据源还需要删除关联的数据库对象,例如数据库范围的凭据和外部表。

必须根据以下参考表更改 Azure 存储连接器:

外部数据源 功能
Azure Blob 存储 wasb[s] abs
ADLS Gen 2 abfs[s] adls

后续步骤

在使用 PolyBase 之前,必须在 Windows 上安装 PolyBase在 Linux 上安装 PolyBase,并在必要时在 sp_configure 中启用 PolyBase。 有关为各种数据源创建外部数据源和外部表的更多教程,请参阅 PolyBase Transact-SQL 参考

查看 PolyBase Transact-SQL 引用 ,其中包含各种数据源的外部数据源和外部表的示例。 有关更多教程,请查看以下文章: