产品派
返回

Snowflake动态表聚合刷新平均提速约40%

后端InfoQ 中文站2026/11/1 20:01:58
AI 导读

Snowflake针对动态表中常见的聚合场景进行了优化。对于顶层GROUP BY及受支持的聚合操作,系统会自动复用上次刷新时保存的结果,只处理新增、删除或变化的数据,无需新增关键字、修改查询语法或调整配置。该能力适用于按客户、账户、设备等维度持续汇总数据的场景。

以按电表汇总用电量和峰值为例,新增100条读数、影响40个电表时,真正变化的只是40个分组,但过去仍可能需要重新读取每个分组的全部历史数据。如果某个电表已有100万条记录,即使只增加一条读数,也可能触发百万行重算,计算成本取决于分组规模,而不是变化数据量。

新机制会利用动态表中已有的聚合值进行增量计算。SUM可按“新值=旧值+新增汇总-删除汇总”直接更新,COUNT及由求和、计数推导出的平均值、标准差和方差也能受益。对于仅有新增数据的MAX,新峰值可通过max(旧峰值、新增峰值)得到。删除操作更复杂,例如删除当前最大值时,系统无法仅凭旧结果确定新峰值,因此会只对相关分组重新计算,其余分组继续采用增量方式。

内部测试针对符合条件、此前刷新耗时超过3秒且包含顶层GROUP BY的动态表展开。结果显示,刷新耗时平均下降约40%,超过三分之二的任务至少缩短10%;最大案例从约377秒降至约2.5秒,性能提升达到147倍。

该优化要求GROUP BY位于动态表查询顶层。若聚合结果上方还有JOIN或UNION,则无法启用;HAVING仍被支持。对于需要关联站点维度等信息的查询,可以拆成两张动态表:第一张只负责按电表聚合,并设置TARGET_LAG = DOWNSTREAM;第二张再读取聚合结果执行连接。这样既满足优化条件,也便于多个下游对象复用聚合结果。

使用者可对照动态表刷新优化文档确认资格。整体而言,这项能力适合变化数据量远小于历史分组规模的聚合流水线,并能在不改造现有定义的前提下同时降低刷新计算量与成本。

Snowflake动态表增量刷新数据仓库聚合计算

本文基于公开渠道信息整理,内容可能存在不准确或遗漏之处,不代表本站立场,如内容涉及侵权或错误,请联系我们处理。

阅读原文