TeraData的变更跟踪

问题描述 投票:0回答:1

我们需要知道自从上次从TeraData数据库导入数据后,该数据库中的哪些行发生了变化。关于TeraData数据库中的表或表中的数据,没有任何东西可以证明是一个可靠的变化信号,我们可以用来确定这一点。在SQL Server中,似乎 变动跟踪 的功能正是我们所需要的,但是源系统是TeraData。有谁知道在TeraData中是否有一个功能,或者一个与TeraData一起工作的第三方工具,可以有效地增加SQL Server变更跟踪所提供的功能,但是要在TeraData数据库中使用?

etl teradata change-tracking
1个回答
0
投票

Teradata是一个OLAP数据库。 你所提到的Sql Server中的功能也是针对OLTP类型的处理。 Teradata是假设你将执行大型的集合操作,而不是小型的单行级操作。 Teradata的一切优化器和功能集都是基于为那些大集操作产生性能。

我们设法跟踪Teradata数据库内变化的唯一方法是。

  1. 在表上添加一个更新时间戳属性 由改变数据的代码来维护。(UI或脚本或通过数据库内的触发器)
  2. 或者在你想跟踪的每个表上创建一个触发器,这个触发器可以是:A. 将记录键和更新时间戳附加到另一个表上B. 这个触发器可以是:A.只将记录键和更新时间戳追加到另一张表上B.或者将整个属性集和更新时间戳追加到另一张表上。或者将整个属性集和更新时间戳追加到另一张表上。
  3. 或者在每个时间窗口捕获整个表格,并比较数据.我们只对非常小的数据集这样做。(域数据)

我们已经为包括Oracle和Teradata在内的各种源数据库完成了这项工作。 触发器相当简单,对于源表的每次插入、更新和删除,都会给 "数据捕获 "表添加一条新的记录。

我们最终从我们需要捕获变化的每个表的模板中生成了触发器,以及数据捕获表的DDL。(我们也在追加的副本)。数据捕获表的属性与源表完全相同,另外还有至少两个元数据属性。变更类型,和一个时间戳。

此外,我们最终在元数据属性中添加了一个 "复制时间戳",我们可以在采集数据时填写。 之所以需要这样做,是因为数据可以不按时间顺序追加。 换句话说,一个短的事务可能会在一个长期运行的事务,很早开始的事务完成之前,就完成了对数据采集表的追加。

这一切可能看起来比仅仅引用SQL Servers的 "变化跟踪 "要复杂一些,但它很简单,对数据库的整体性能影响不大。 我们的测量结果是3%的影响,因为我们添加了所有的触发器。

© www.soinside.com 2019 - 2024. All rights reserved.