动态表查询性能¶
本部分讨论如何设计管道,以便在查询时获得良好的性能。您的数据在通过不同的系统时会以各种形式出现:
源数据:最初,数据由真实世界的实体生成,并在一线系统中收集。然后,此数据通过 ETL 过程 引入 Snowflake 中。
原始数据:引入后,数据存储在 Snowflake 表中,即 转换 为更适合分析的形式。
建模数据:这些转换会产生一组模型,这些模型向使用者呈现熟悉的概念以供 分析。
您的 管道 包含这些步骤。动态表在转换步骤中工作,但您应在整个管道的上下文中考虑其性能。
了解物化¶
分析查询的性能由从原始数据到建模数据的转换的设计和实现确定。虽然将这些转换定义为原始数据的一组视图在技术上是正确的,但可能无法满足性能和成本需求。
为了解决这个问题,可能需要预先计算部分或所有数据模型的结果,将其存储起来以便快速访问,并使其保持最新来进行 物化。动态表可以简化这种物化,但您仍然必须决定要物化哪些模型。
物化边界¶
转换的物化部分和未物化部分之间的划分称为 物化边界。在确定物化边界时,以下因素通常是相关的:
滞后或新鲜度:您提供的数据的新鲜度,即您的结果的过时程度。物化边界通常不会对此因素产生强烈影响。
响应时间 (link removed):物化更多管道可缩短响应时间。新鲜度始终至少与查询的响应时间一样长,但可能会更长。
成本:工作负载的成本与以下内容相关联:
物化成本:此成本与源中的数据量和转换的复杂性成比例。
在分析过程中计算未物化转换的成本:此成本与分析查询的数量及其复杂性成比例。
存储成本:此成本包括原始数据和物化数据。
物化更多建模数据可以加快响应时间并降低分析成本,但可能会增加物化成本。找到最佳物化边界需要平衡上述因素。通常,您可以通过物化仍满足响应时间要求的最少数据量来获得良好的结果。
如何物化¶
设置物化边界后,您就可以相应地创建动态表和视图。您可以优化未物化转换的性能,就像任何其他 Snowflake 查询一样。查询后,常规表和动态表的执行方式类似,允许您使用规范化、预聚合和群集分析等标准技术提高性能。
有关更多想法,请参阅 查询性能清单 (https://community.snowflake.com/s/article/Checklist-Query-Performance)。