Azure Serverless SQL - 对非分区列性能进行过滤

问题描述 投票:0回答:1

我是 Azure 新手。我了解使用 filepath(n) 或在文件路径上使用通配符进行过滤时的性能增益

但是我想知道当您在分区列以外的其他列上查询数据过滤时,性能如何。它能慢多少(与分区列上相比)?

我认为引擎/突触应该扫描所有文件夹中的所有文件,并且考虑到无服务器数据集不能有索引,我还认为它会非常慢(相比之下)。

为了提高性能,一个好的做法是将文件组织在多个文件夹中,例如“长”路径 pc1/.../pcN/npc1/.../npcM,其中每个 npc* 文件夹是我稍后过滤的非分区列吗?

任何人都可以提供一些见解或准确的链接吗?

azure serverless partitioning azure-synapse
1个回答
0
投票

您应该考虑将经常运行的查询并相应地对数据进行分区。如果您有定期筛选的特定非分区列,您可能需要考虑重组数据以使这些列成为分区方案的一部分。

根据非分区列将文件组织到许多子文件夹中(正如您使用“长”路径 pc1/.../pcN/npc1/.../npcM 所建议的那样)可能会提高特定查询的性能。然而,这种方法具有复杂性的局限性,管理起来可能会变得复杂。它可能会创建不必要的分区,这在某些情况下实际上可能会降低性能。您必须仔细平衡分区的粒度与查询模式和数据量。

此外,在无服务器中,如果基于数据读取,您的成本也会增加,因此您肯定希望通过尽可能避免扫描来减少读取的数据量。确保仅读取与查询相关的部分数据。

扫描在性能方面的成本非常高。但实际扫描性能将取决于需要读取多少数据。

编辑以更新有关连接的更多信息。

Parquet 是一种列式存储格式。这意味着跨多行读取特定列的数据比读取特定行的许多列要快。如果您的 JOIN 操作主要过滤或扫描特定列,Parquet 的结构本质上会提供一些性能优势。

对数据进行分区时,查询引擎可以跳过与查询无关的整个分区。这对于过滤操作特别有益,而不是专门针对 JOIN。如果允许查询引擎跳过大量不相关的数据,对您要加入的列进行分区可以提高性能

© www.soinside.com 2019 - 2024. All rights reserved.