【问题标题】:Change Tracking for TeraDataTeraData 变更跟踪
【发布时间】:2013-03-03 09:49:14
【问题描述】:

我们需要一种方法来了解自上次从 TeraData 数据库中导入数据以来哪些行发生了变化。 TeraData 数据库中的表或表中的数据没有任何内容被证明是我们可以用来确定这一点的可靠变化信号。在 SQL Server 中,Change Tracking 功能似乎完全符合我们的需求,但源系统是 TeraData。有谁知道 TeraData 或与 TeraData 一起使用的第三方工具中是否有一个功能可以有效地将 SQL Server Change Tracking 提供的功能添加到 TeraData 数据库中?

【问题讨论】:

  • 您是从复制的角度、故障转移系统的角度,还是仅仅从 ETL 的角度来识别哪些记录已被更改?
  • 这仅限于 ETL。

标签: etl teradata change-tracking


【解决方案1】:

Teradata 是一个 OLAP 数据库。您在 Sql Server 中引用的功能也用于 OLTP 类型处理。 Teradata 假设您将执行大型集合操作,而不是小型单行级操作。 Teradata 的优化器和功能集的一切都基于为这些大型集合操作生成性能。

我们设法在 Teradata 数据库中跟踪更改的唯一方法是:

  1. 将更新时间戳属性添加到由更改数据的代码维护的表中。 (用户界面或脚本或数据库中的触发器)
  2. 或者在您希望跟踪的每个表上创建一个触发器。此触发器可以: A. 仅将记录键和更新时间戳附加到另一个表 B. 或者将整个属性集和更新时间戳附加到另一个表中
  3. 或在每个时间窗口捕获整个表,并比较数据。 我们只对非常小的数据集这样做。 (域数据)

我们已经为包括 Oracle 和 Teradata 在内的各种源数据库完成了这项工作。触发器相当简单,它会为源表上的每个插入、更新和删除在“数据捕获”表中附加一个新行。

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

此外,我们最终在元数据属性中添加了一个“复制时间戳”,我们可以在获取数据时填写该属性。这是必需的,因为数据可以附加到时间序列之外。换句话说,一个短事务可能会在一个长时间运行的事务之前完成对 Data Capture 表的追加,该事务很早就开始,永远结束。

这一切可能看起来比仅仅引用 SQL Server 的“更改跟踪”要复杂一些,但它非常简单,不会对数据库的整体性能产生太大影响。由于我们添加了所有触发器,我们的测量结果产生了 3% 的影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2014-09-29
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多