跳到主要内容

更改表格

您可以使用目标端点的工具,以使用更改表中的元数据获取信息。此数据由添加到更改表模式的表头列定义。下表介绍了这些表头。

对于复制任务中的每个目标表, 都会在具有目标表的数据库中维护一个具有相应名称的更改表。有关更多信息,请参阅使用更改表。更改表包含原始表列和标题列。表头列包含前缀,这样名称就不会与源表列名冲突。默认前缀为 header__。有关如何更改此前缀的信息,请参阅“任务设置”中“元数据”下的更改表列表。下表列出了默认的更改表表头列。

列名称 类型 说明

[header__]change_seq

varchar (35)

单调递增的变更序列器,对于任务的所有变更表都是通用的。变更序列的格式如下:

YYYYMMDDHHmmSShhxxxxxxxxxxxxxxxxxxx

其中:

  • YYYY 是四位数年份(如2012年)
  • MM 是两位数的月份(范围为 01-12)
  • DD 是两位数的日期(范围从 01 到 31)

  • HH 是一天中的小时(范围从 00-23)
  • mm是小时中的分钟(范围从 00-59)
  • SS 是分钟中的秒(范围从 00-59)
  • hh 是百分之一秒(范围从 00-99)
  • xxxxxxxxxxxxxxxxxxx 是一个 19 位、前缀为零的变更号(每个任务全局适用)

时间部分通常是指包含变更记录的事务的提交时间。Qlik Talend Data Integration 包含保持序列号单调性的逻辑,因此修改或调整端点时间可能会导致多个变化,看起来它们在同一时间戳内,但变化数量会增加。

xxx...xxx 通常是来自数据记录的内部更改编号,除了对于 BEFORE-IMAGE 记录,它与匹配的 UPDATE 记录的更改编号相同(例如,如果 BEFORE-MAGE 的更改编号是 1000,UPDATE 的更改编号为 1001,则两者都有 1001)。这允许在表和它本身之间进行简单的左外部连接,在左边我们扫描直到时间点,但筛选掉 operation=before-image,在右边我们在相同的 change_seq 上连接,其中 change_oper 为“B”。

[header__]change_oper

varchar (1)

操作类型。这可能是以下情况之一:

  • I:插入
  • D:删除
  • U:更新
  • B:之前图像

[header__] change_mask

varbinary (128)

更改掩码指示更改表中的哪些数据列与源表中已更改的列相关联。

基于更改表中的列序号更改掩码中的位位置。这意味着,如果有 5 个表头列,它们占据位 0 到 4,并且第一个数据列是改变掩码中的位 5。

更改掩码是一个二进制列(字节数组),以小尾数法次序表示更改掩码:

Byte 0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

Byte 1 bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

在本例中,bit#N 表示序号为 N 的更改表列与源表中更改的列有关。如果更新掩码是 11000 并且列序号是 3,则该列没有改变。

以下描述了位语义:

  • 对于 INSERT 记录,所有插入的列都设置了相关的位。
  • 对于 DELETE 记录,只有主键(或唯一索引)列设置了相关的位。这允许应用程序构造 DELETE 语句,而不必从另一个源中查找主键字段。
  • 对于 BEFORE-IMAGE 记录,所有位都是清楚的(更改掩码可以为空)。
  • 对于 UPDATE 记录,其值在 BEFORE-IMAGE 和 UPDATE 之间发生变化的每一列都将设置相关的位。

为了空间和处理效率,可以对存储在更改掩码中的实际字节数进行零修剪。这意味着不需要存储尾零。处理逻辑应该考虑到这一点。

[header__] stream_position

varchar (128)

源 CDC 流位置。

[header__] operation

varchar (12)

与更改记录关联的操作。其可为以下项之一:

  • INSERT
  • UPDATE
  • DELETE
  • BEFOREIMAGE

[header__] transaction_id

varchar (32)

更改记录所属事务的 ID。

该值是 128 位事务 ID 的十六进制字符串。

[header__] timestamp

时间戳

原始更改 UTC 时间戳(该值可能是近似值)。

信息注释 对于 PostgreSQL 源,时间戳只有在提交之后才能确定。因此,在将更改提交到源表之前,将显示默认日期(例如 1970-01-01)。

[header__] partition_name

字符串

启用更改数据分区时在目标上创建的分区的名称。分区名称由分区开始时间和结束时间组成。

示例:

20170313T123000_20170313T170000

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们如何改进!