【发布时间】:2014-09-05 02:34:24
【问题描述】:
所以我希望更新这张只有大约 40,000 行的表。同事说最好增量更新表,而不是完全删除和加载。
因此,我尝试通过计算脚本的设计和逻辑来执行此操作,但我缺乏经验。我只是不知道增量更新表有什么效率和不需要。
目前,仓库看起来是这样的:数据来自源到 Teradata 中的一个表(我们称之为 T1)。然后它被发送到 Teradata 中的另一个表(我们称之为 T2),并添加了一些字段,例如时间戳。最后,出于安全原因,在最后一个表上构建了一个视图。
因此,我正在考虑使用来自 T1 的数据创建一个临时/易失性表。这将拥有直到脚本与新记录一起运行时的所有数据。然后,遍历整个表,查看 T2 中是否已经存在 ID(主索引),如果不存在,则将其添加到另一个临时表中。然后以某种方式将第二个临时表与 T2 组合并覆盖 T2 并在其上构建一个视图。
这有意义吗?
还有记录被更新的可能性。所以它们已经存在于 T2 中,但在新版本的 T1 中更新了数据。我认为比较从 T1 到 T2 的所有列的值效率非常低,但想不出另一种方法来做到这一点
【问题讨论】:
-
“同事说最好增量更新表,而不是完全删除和加载。”不一定。 能否用您的源数据替换 T1 而不会丢失信息?
-
“增量更新”不同于“完全删除和加载”,根据您的源数据,您无法执行 #2。否则,这听起来像是一个简单的“更新其他插入”策略,可以使用 MERGE INTO 轻松实现。