为什么 Polybase 对于跨越 10 亿条记录的大型压缩文件速度慢?

Why is Polybase slow for large compressed files that span 1 billion records?

在查询较大的数据集以便将记录从 Blob 存储插入 Azure 数据仓库时,什么会导致 Polybase 性能下降?

例如,数千个压缩 (.gz) CSV 文件 headers 在 6 个月的数据中每天按几个小时划分。在 SSMS 中从外部 table 查询这些文件并不是最佳选择,而且非常慢。

客观地说,我正在将数据加载到 Polybase 中,以便将数据传输到 Azure 数据仓库中。除了,对于大型数据集,Polybase 似乎非常慢。

这里有哪些优化 Polybase 的选项?在每次上传到 blob 存储后增量地等待查询或加载数据?

在您的方案中,Polybase 必须连接到外部源中的文件,解压缩它们,然后确保它们适合您的外部 table 定义(架构),然后允许查询定位内容.当您以 one-off 导入方式处理大量文本文件时,也没有什么可以真正缓存的,因为它每次都在处理新内容。简而言之,您的场景计算量很大。

Azure Blob 存储(目前)最大速度约为 1,250MB/秒,因此如果您的吞吐量接近最大值,那么提高性能的最佳方法是升级 SQL 数据仓库上的 DWU。在后台,这会将您的工作负载分散到更大的集群(更多服务器)上。 SQL 数据仓库 DWU 可以在几分钟内扩展或缩小。

如果您有巨大的卷并且正在最大化存储,则使用多个存储帐户来分散负载。

其他替代方法包括在上传或暂存过程中减轻 Polybase 的解压缩工作。在 Azure 中执行此操作,其中数据中心内的网络带宽快如闪电。

您也可以考虑使用 Azure 数据工厂来完成这项工作。 See here 支持的文件格式。支持 GZip。使用复制 Activity 从 Blob 存储复制到 SQL DW。

同时查看:

  1. CTAS(将 Table 创建为 Select),这是将数据从外部 table 移动到 Azure 数据仓库内部存储的最快方法。
  2. Creating statistics 用于您的外部 table 如果您要重复查询它们。 SQL Data Warehouse 不会像 SQL Server 那样自动创建统计信息,您需要自己做。