# Teradata 变更处理

Teradata 数据源不会生成可直接读取用于变更处理的事务日志。为了捕获更改，Qlik Talend Cloud Data Integration 会扫描源表中的上下文列，以识别 INSERT、UPDATE 和 DELETE 操作。

## 先决条件

在配置变更处理之前，请确保源表中至少存在一个特殊上下文列。上下文列使 Qlik Talend Cloud Data Integration 能够确定数据是否已更改。

* 添加专门用于变更处理的上下文列，或使用包含合适上下文数据的现有列。
* 您可以使用多个上下文列，但所有源表中的列名必须相同。
* 上下文列中的每个值都必须唯一。
* 对于非日期时间上下文列，例如计数器、字符串以及非基于纪元时间的数值，请使用单例实体来生成这些值。从多个并发源生成值可能会导致事件丢失。

### 示例

在以下示例中，`cf` 上下文列已添加到表中。该列包含时间戳，Qlik Talend Cloud Data Integration 使用这些时间戳，通过将当前时间戳与其储存库中存储的时间戳进行比较，来确定是否发生了更改。

![包含带时间戳的 cf 上下文列的表](<https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Replicate/context columns.png>)

默认情况下，所有更改都被视为 INSERT 操作。如果源表也接收 UPDATE 或 DELETE 操作，请定义更新和删除表达式以标识操作类型。

## 配置变更处理设置

1. 选择源连接并打开CDC 属性部分。
2. 在上下文列中，以区分大小写、逗号分隔的列表形式输入上下文列的名称。例如，`context1,context2`。
3. 为上下文列的排序顺序选择升序或降序。所选顺序必须与源表中值的实际顺序相匹配。否则，会发生错误。
4. 设置每隔（秒）检查一次更改以指定检查更改的频率。默认值为 10 秒。
5. 输入更新表达式以识别 UPDATE 操作。
6. 输入删除表达式以识别 DELETE 操作。

如果您未定义更新或删除表达式，或者表达式不匹配，则在升序排序时上下文高于前一个上下文值、或在降序排序时上下文低于前一个上下文值的行将被视为 INSERT 操作。

### 表达式

使用源数据库的原生语法编写表达式。以下示例使用的 `oper` 列包含用于更新的 `U` 和用于删除的 `D`：

* 更新表达式：`case when oper='U' then 1 else 0 end`
* 删除表达式：`case when oper='D' then 1 else 0 end`

若要处理 DELETE 操作，请使用软删除。软删除是将该行标记为已删除，而不是将其从表中移除。

有关其他 Teradata 变更处理限制，请参阅 [限制和考虑事项](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Teradata/limitations-teradata-source.htm)。

## 其他设置与摘要

在CDC 属性部分，您还可以配置内部参数、添加更多选项，并查看变更处理设置的摘要。

### 内部参数

内部参数未在标准用户界面中公开。仅在 x 指示时添加或更改它们。

1. 打开内部参数设置。
2. 输入参数名称并将其添加到参数列表中。
3. 按照 x 的指示更改参数值。

### 更多选项

更多选项不会在标准用户界面中公开，且仅适用于特定版本或环境。除非 x 或产品文档指示您这样做，否则请勿设置这些选项。

### 覆盖连接字符串参数

您可以追加未在用户界面中公开的连接字符串参数。这些参数通常不是必需的。在添加它们之前，请咨询 x。

### 设置摘要

当您需要审查或向 x 提供配置详细信息时，查看变更处理设置摘要。