目前我有一个表(A),其中列存储了其他表(B)中的一些聚合值。在B表中的更改数据上,此列通过普通UPDATE A ... FROM SELECT B
语句进行相应更新。
Vertica 8.1提供了相关功能:Flattened Tables。使用SET USING
约束时,它看起来像是相同的过程:按需(通过调用REFRESH_COLUMNS()
)读取源表并将结果写入目标列。
Documentation过于简单地谈论了Flattened Tables的好处:
展平表可以包含通过查询其他表来获取其值的列。源表和展平表的操作是分离的;一个中的更改不会自动传播到另一个。这最大限度地减少了非规范化表的典型开销。
是的,此约束看起来比手动更新更清晰。但我只是想明白:它只是"语法糖"引擎盖下的操作相同或完全不同的方式?性能有任何优点或缺点吗?可能有人已经使用它并可以分享自己的经验。
答案 0 :(得分:2)
我记录了扁平的表格功能,但那是一段时间了,所以我与首席开发人员一起检查以刷新我的记忆。他的回答是:
是的,在某些方面,扁平表有点类似于"语法糖"。但是,它确实有一些优化可以将它区分开来。例如,您可以在UPDATE模式下使用SET USING约束刷新列,这可以避免修改未更改的行。此外,没有DML(至少不在Vertica中)可以让您同时刷新多个列。