孤本网
/ 0 阅读
0
0

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

一句话结论

Snowflake 更新动态表增量刷新机制,通过复用已有聚合结果消除重新计算冗余数据,使平均刷新耗时降低约 40%。

关键要点

  • Snowflake 动态表在增量刷新时自动复用已存储的聚合结果,无需新增关键字或配置选项即可生效。
  • 该优化要求 GROUP BY 操作必须位于动态表定义的顶层,若其上方存在 JOIN 或 UNION 则无法启用。
  • 优化后计算工作量与变化的数据量成正比,不再取决于受影响分组的大小,显著提升了增量刷新的效率。
  • 内部测量显示,符合优化条件且刷新耗时超过 3 秒的动态表,总刷新耗时平均降低约 40%,最大单次性能提升达 147 倍。
  • 对于 MAX 等不可逆聚合函数,若最大值被删除仍需重新计算,但 Snowflake 仅对确实需要重算的分组执行此操作。

背景与事实

Snowflake 动态表旨在让用户通过定义数据管道,自动保持数据最新而无需编写刷新逻辑。在企业级应用中,聚合流水线是动态表客户中最常见的模式之一,例如将订单数据按客户汇总、将会话数据按账户汇总,或将传感器读数按设备汇总。此前,虽然动态表具备缩小计算范围至受影响分组的能力,但存在一个被忽视的痛点:获取聚合值需要重新读取该分组的所有数据行并再次计算。这意味着即使某个分组仅新增了一行数据,若其历史数据量庞大,刷新成本依然高昂,计算工作量与受影响分组的大小成正比,而非引发变化的数据量。

此次更新后,Snowflake 对动态表刷新机制进行了优化。对于定义中位于顶层的受支持聚合操作,系统会利用已经存储的聚合结果进行刷新,无需从头重新计算受影响的数据分组。以电表累计用电量为例,如果某电表此前累计值已知,新增一条读数时,系统可直接通过算术运算得出新值,而无需重新遍历全部历史数据。这一优化完全自动完成,只要动态表的定义符合相应的结构要求,优化即自动生效。具体实现方式取决于聚合函数:SUM、COUNT、平均值、标准差和方差等可逆或基于求和推导的聚合可直接复用旧值;MAX 在仅涉及新增行时也可采用类似方法;但对于删除操作,若当前最大值被删除,由于 MAX 函数不可逆,系统会识别此类情况并仅对确实需要重新计算的分组执行全量重算,其他分组仍享受优化收益。

在性能表现方面,Snowflake 内部测量了符合此次优化条件、具有顶层 GROUP BY 操作的动态表,测量范围仅限于此前刷新耗时超过 3 秒的情况。结果显示,总刷新耗时平均降低约 40%,超过三分之二的刷新任务耗时至少缩短了 10%。观察到的最大单次性能提升达到 147 倍,某次刷新原本需要约 377 秒,优化后仅用约 2.5 秒便完成。

影响分析

对于中文开发者与数据工程师而言,这一优化意味着构建基于 Snowflake 的动态数据管道时,长期运行成本将显著下降。特别是在处理大规模时序数据、IoT 传感器数据或高并发交易日志等场景时,以往因历史数据累积导致的刷新延迟和计算费用痛点将得到缓解。作为分析判断,企业可以将此前因成本考量而推迟或简化的高频刷新任务(如缩短 TARGET_LAG 至分钟级)重新纳入实施范围,从而获得更接近实时的数据洞察。此外,该优化降低了增量计算的复杂度,使团队在设计和重构现有数据管道时,可以更专注于业务逻辑本身,而无需过度担忧底层计算引擎的刷新效率问题。

适用边界

该优化结论在动态表定义的 GROUP BY 操作位于顶层时成立。如果聚合操作之上还有连接(JOIN)或联合(UNION)操作,则无法启用该优化,此时需将任务拆分至多张动态表,使聚合操作独立成表并位于顶层。对于 MAX 等不可逆聚合函数,若发生删除操作导致当前最大值失效,相关分组仍需重新计算,不能完全避免全量读取该分组的历史数据。因此,在涉及大量数据删除且依赖 MAX 聚合的场景中,优化效果可能低于纯插入或可逆聚合场景。

孤本观察

Snowflake 将优化自动应用于符合条件的表,降低了用户迁移或配置成本,体现了云数据平台向“零配置高性能”演进的趋势。作为编辑判断,这种将计算复杂度转移至平台底层、对用户透明的设计,可能成为未来数据流处理引擎的主流范式。

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

Snowflake 动态表增量刷新引入复用机制,显著降低计算成本与耗时

常见问题

Snowflake 动态表增量刷新优化平均降低了多少耗时?

内部测量显示,符合优化条件且刷新耗时超过 3 秒的动态表,总刷新耗时平均降低约 40%。

启用该复用机制对动态表的 GROUP BY 位置有什么具体要求?

GROUP BY 操作必须位于动态表定义的顶层,若其上方存在 JOIN 或 UNION 操作,则无法启用该优化。

对于 MAX 等不可逆聚合函数,数据删除时系统如何处理?

若删除操作导致当前最大值失效,由于 MAX 不可逆,系统仅对确实需要重算的分组执行全量重新计算,其他分组仍享受优化收益。

此次性能优化中最显著的单次提升案例是多少?

观察到的最大单次性能提升达到 147 倍,某次刷新原本需要约 377 秒,优化后仅用约 2.5 秒完成。

若动态表包含 JOIN 或 UNION,应如何设计以享受该优化?

需将任务拆分至多张动态表,使聚合操作独立成表并位于顶层,因为聚合上方存在 JOIN 或 UNION 时无法启用复用机制。

来源:InfoQ 中文 AI


评论