# 更改表格

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

对于复制任务中的每个目标表， 都会在具有目标表的数据库中维护一个具有相应名称的更改表。有关更多信息，请参阅[使用更改表](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/use_change_table_model.htm)。更改表包含原始表列和标题列。表头列包含前缀，这样名称就不会与源表列名冲突。默认前缀为 `header__`。有关如何更改此前缀的信息，请参阅“任务设置”中“元数据”下的更改表列表。下表列出了默认的更改表表头列。

| 列名称 | 类型 | 描述 |
| --- | --- | --- |
| `[header__]change_seq` | varchar (35) | 单调递增的变更序列器，对于任务的所有变更表都是通用的。变更序列的格式如下：<br><br>YYYYMMDDHHmmSShhxxxxxxxxxxxxxxxxxxx<br><br>其中：<br><br><ul> <li>YYYY 是四位数年份（如2012年）</li> <li>MM 是两位数的月份（范围为 01-12）</li> <li> <p>DD 是两位数的日期（范围从 01 到 31）</p> </li> <li>HH 是一天中的小时（范围从 00-23）</li> <li>mm是小时中的分钟（范围从 00-59）</li> <li>SS 是分钟中的秒（范围从 00-59）</li> <li>hh 是百分之一秒（范围从 00-99）</li> <li>xxxxxxxxxxxxxxxxxxx 是一个 19 位、前缀为零的变更号（每个任务全局适用）</li> </ul><br><br>时间部分通常是指包含变更记录的事务的提交时间。Qlik Talend Data Integration 包含保持序列号单调性的逻辑，因此修改或调整端点时间可能会导致多个变化，看起来它们在同一时间戳内，但变化数量会增加。<br><br>xxx...xxx 通常是来自数据记录的内部更改编号，除了对于 BEFORE-IMAGE 记录，它与匹配的 UPDATE 记录的更改编号相同（例如，如果 BEFORE-MAGE 的更改编号是 1000，UPDATE 的更改编号为 1001，则两者都有 1001）。这允许在表和它本身之间进行简单的左外部连接，在左边我们扫描直到时间点，但筛选掉 `operation=before-image`，在右边我们在相同的 `change_seq` 上连接，其中 `change_oper` 为“B”。 |
| `[header__]change_oper` | varchar (1) | 操作类型。这可能是以下情况之一：<br><br><ul> <li><code>I</code>：插入</li> <li><code>D</code>：删除</li> <li><code>U</code>：更新</li> <li><code>B</code>：之前图像</li> </ul> |
| `[header__] change_mask` | varbinary (128) | 更改掩码指示更改表中的哪些数据列与源表中已更改的列相关联。<br><br>基于更改表中的列序号更改掩码中的位位置。这意味着，如果有 5 个表头列，它们占据位 0 到 4，并且第一个数据列是改变掩码中的位 5。<br><br>更改掩码是一个二进制列（字节数组），以小尾数法次序表示更改掩码：<br><br>Byte 0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0<br><br>Byte 1 bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8<br><br>在本例中，`bit#N` 表示序号为 N 的更改表列与源表中更改的列有关。如果更新掩码是 11000 并且列序号是 3，则该列没有改变。<br><br>以下描述了位语义：<br><br><ul> <li>对于 INSERT 记录，所有插入的列都设置了相关的位。</li> <li>对于 DELETE 记录，只有主键（或唯一索引）列设置了相关的位。这允许应用程序构造 DELETE 语句，而不必从另一个源中查找主键字段。</li> <li>对于 BEFORE-IMAGE 记录，所有位都是清楚的（更改掩码可以为空）。</li> <li>对于 UPDATE 记录，其值在 BEFORE-IMAGE 和 UPDATE 之间发生变化的每一列都将设置相关的位。</li> </ul><br><br>为了空间和处理效率，可以对存储在更改掩码中的实际字节数进行零修剪。这意味着不需要存储尾零。处理逻辑应该考虑到这一点。 |
| `[header__] stream_position` | varchar (128) | 源 CDC 流位置。 |
| `[header__] operation` | varchar (12) | 与更改记录关联的操作。其可为以下项之一：<br><br><ul> <li>INSERT</li> <li>UPDATE</li> <li>DELETE</li> <li>BEFOREIMAGE</li> </ul> |
| `[header__] transaction_id` | varchar (32) | 更改记录所属事务的 ID。<br><br>该值是 128 位事务 ID 的十六进制字符串。 |
| `[header__] timestamp` | 时间戳 | 原始更改 UTC 时间戳（该值可能是近似值）。<br><br>信息注释 对于 PostgreSQL 源，时间戳只有在提交之后才能确定。因此，在将更改提交到源表之前，将显示默认日期（例如 1970-01-01）。 |
| [header\_\_] `partition_name` | 字符串 | 启用更改数据分区时在目标上创建的分区的名称。分区名称由分区开始时间和结束时间组成。<br><br>：<br><br>20170313T123000\_20170313T170000 |