Informatica 中的事务控制转换(示例)

⚡ 智能摘要

在 Informatica 中,事务控制转换是一个活动的、连接的对象,它会在映射过程中提交或回滚行。ping 运行过程中,使用五个内置变量,每个变量在一个条件中对每一行进行一次评估。

  • 🔄 五个内置变量: TC_CONTINUE_TRANSACTION、TC_COMMIT_BEFORE、TC_COMMIT_AFTER、TC_ROLLBACK_BEFORE 和 TC_ROLLBACK_AFTER 决定每一行发生什么。
  • ⚙️ 条件存在于属性中: “属性”选项卡上的“事务控制条件”字段包含集成服务要评估的 IIF 表达式。
  • 🧪 示例: 七图ping 设计步骤会在找到部门编号 20 时将 EMP 数据提交到 EMP_TARGET。
  • ✅ 有效或无效: 任何在转换后丢弃事务边界的转换,都会使对象对目标无效。
  • 🔧 会话提交类型: 一张地图ping 有效的事务控制转换在用户定义的提交类型下运行。
  • ⚠️ 严格返回值: 如果条件返回除 commit、rollback 或 continue 之外的任何值,则集成服务会话将失败。

Informatica 中的事务控制转换

什么是事务控制转换?

事务控制是一种主动且相互关联的转换,它允许我们在映射执行期间提交或回滚事务。ping提交和回滚操作非常重要,因为它们可以保证数据的可用性。

处理大量数据时,有时需要将数据提交到目标位置。如果提交过于频繁,会给系统带来过大的开销;如果提交过晚,一旦发生故障,则可能导致数据丢失。

因此,为了提供灵活性,提供了事务控制转换。它不是将提交点保留为会话默认值,而是允许在会话内部设置条件。 地图ping 逐行确定一笔交易的结束位置和下一笔交易的开始位置。

TCL提交和回滚命令

此转换中内置了五个变量来处理操作。条件必须为每一行返回这五个变量之一,如果返回的值不在列表中,则集成服务将导致会话失败。

TC_CONTINUE_TRANSACTION

在 TC_CONTINUE_TRANSACTION 中,不执行任何操作,数据加载过程将继续进行。这是该表达式的默认值。

TC_COMMIT_BEFORE

在 TC_COMMIT_BEFORE 中,如果此标志被设置,则会在处理当前行之前执行提交操作。然后开始一个新的事务,并将当前行写入目标。

TC_COMMIT_AFTER

在 TC_COMMIT_AFTER 中,当前行处理完毕后,执行提交操作,然后开始下一个事务。

TC_ROLLBACK_BEFORE

在 TC_ROLLBACK_BEFORE 中,首先执行回滚操作,然后处理数据以进行写入。

TC_ROLLBACK_AFTER

在 TC_ROLLBACK_AFTER 中,数据处理完毕后,执行回滚操作。

事务控制转换属性

该对象在“编辑转换”窗口中进行配置,该窗口与其他 PowerCenter 转换一样,包含四个选项卡。了解每个选项卡包含哪些设置,可以省去以下演练过程中大量的查找工作。

制表 那里配置了什么?
转型 转换的名称、转换描述以及对象是否可重用。
端口 输入和输出端口通常是通过从上游转换中拖入列而创建的。
物业 点击字段旁边的箭头即可打开“交易控制条件”按钮。 Tracing Level 已写入会话日志。
元数据扩展 用户自定义元数据与转换一起保存在存储库中。

真正起作用的是两个设置。 交易控制条件 该表达式通常是一个 IIF() 测试,返回五个变量之一。 Tracing 级别 决定在调查运行时,会话日志中显示多少有关转换的详细信息。

一个设置位于转换之外。当地图ping 包含有效的事务控制转换,会话运行于 提交类型 在“属性”选项卡上设置为“用户定义” 会议而不是 Target 或者使用固定提交间隔的源提交类型。

如何在 Informatica 中使用事务控制转换

在这个例子中,当部门编号 = 20 的条件为真时,我们将向目标提交数据。

步骤1) 创建地图ping 以 EMP 为源,EMP_TARGET 为目标。地图ping 设计画布随后包含源、其源限定符和目标定义。

地图ping 设计器画布包含 EMP 源、其源限定符和 EMP_TARGET 目标定义

步骤2) 使用“转换”菜单创建新的转换,然后在“创建转换”窗口中:

  1. 选择事务控制作为新的转换
  2. 输入转换名称“tc_commit_dept20”
  3. 选择创建选项

创建转换窗口,选择“事务控制”,并输入名称“tc_commit_dept20”。

步骤3) 事务控制转换创建完成后,点击“完成”按钮。新对象现在会出现在画布上的“源限定符”旁边。

在源限定符旁边创建了事务控制转换 tc_commit_dept20。

步骤4) 将源限定符中的所有列拖放到事务控制转换中,然后将事务控制转换中的所有列链接到目标表。管道现在运行源 → 源限定符 → tc_commit_dept20 → EMP_TARGET。

源限定符列通过 tc_commit_dept20 链接到 EMP_TARGET 表

步骤5) Double 单击“事务控制”转换,然后在编辑属性窗口中:

  1. 选择属性选项卡
  2. 点击事务控制编辑器图标

“编辑转换”窗口的“属性”选项卡显示事务控制编辑器图标

步骤6) 在表达式编辑器中输入表达式 –

iif(deptno=20,tc_commit_before,tc_continue_transaction)

然后选择“确定”。这意味着如果找到部门编号为 20 的实例,则在目标系统中提交事务;否则,继续当前处理。

表达式编辑器包含 IIF 条件,该条件会在部门编号为 20 的行提交之前执行。

步骤7) 在上一个窗口中选择“确定”。该条件现在已存储在转换的“属性”选项卡中。

事务控制条件保存后,“编辑转换”窗口的“属性”选项卡

现在保存地图ping 创建会话和工作流后执行它。此映射ping 当数据中找到部门编号为 20 的数据时,将数据提交到目标位置。

有效和无效的交易控制转型

该转换是一个事务生成器。它会丢弃来自上游的任何事务边界,并为下游的所有内容定义新的边界,因此它在管道中的位置与其状态同样重要。

它被称为 高效 对于目标而言,当它所形成的边界仍然到达该目标时,并且 无效 当后续转换丢弃这些边界时,就会发生这种情况。根据 Informatica PowerCenter 转换指南,以下对象会丢弃传入的事务边界:

  • 聚合器, 细木工, 秩排序器或自定义转换,其转换范围为“所有输入”
  • 配置为生成事务的自定义转换
  • 另一项交易控制转换
  • 连接到多个上游事务控制点的多输入组转换

对目标无效并不意味着对象就毫无用处。下游转换(其转换范围为事务)仍然使用上游定义的边界,因此同一个转换可能对排序器有效,但对其背后的表无效。

在地图上ping 面对多个目标时,该物体可能对一个目标有效,而对另一个目标无效。ping 当所有目标都连接到有效的事务控制转换时,此映射保持有效;一旦有一个目标不再连接到事务控制转换,此映射即失效。设计器会在映射失效时报告哪些转换对目标无效。ping 已保存或已验证。

交易控制转型规则和指南

这种转换的大部分问题都是在运行时而不是设计时出现的,因此在构建会话之前,值得检查以下几点。

  • 返回值是严格的。 如果条件评估结果不是提交、回滚或继续,则集成服务会话将失败。
  • TC_CONTINUE_TRANSACTION 是备用方案。 IIF() 的每个分支都必须在某个地方结束,而 continue 的值会使当前事务保持不变。
  • 目标类型很重要。 连接到关系型、XML 或动态 MQSeries 目标以外的任何目标的事务控制转换对该目标无效。
  • 该条件只能利用它所能获取的资源。 只有连接到转换的端口、其可变端口和内置变量才能在事务控制编辑器中使用。
  • 提交频率是一种权衡。 几乎每行都会触发的条件会消除缓冲的好处,而几乎从不触发的条件会重新引入数据丢失窗口,而添加转换正是为了关闭这个窗口。
  • 查看会话日志。 日志记录了实际执行的提交点,这是确认条件是否按预期运行的最快方法。 性能调优.

常见问题

提交间隔是指在会话中处理完设定的固定行数后进行提交。事务控制条件则基于数据本身进行提交,因此提交点遵循业务规则而非行数。

Informatica PowerCenter 转换指南指出,连接到关系型、XML 或动态 MQSeries 目标以外的任何目标的事务控制转换对该目标无效。

是的。可以在转换开发工具中构建,或者在现有转换的“转换”选项卡上勾选“设为可重用”。每个映射ping 然后它们共享相同的条件,因此规则的更改会同时影响到它们所有人。

基于历史会话日志的机器学习可以标记出提交频率与运行时间过长或回滚风暴相关的负载。该建议目前仍为假设,因此在更改条件之前,请通过实际运行进行验证。

Copilot 可以生成 IIF() 表达式并提醒您五个变量的名称,但它不知道您的端口名称或业务规则。请将输出结果作为起点,并在表达式编辑器中进行验证。

更新策略决定如何处理一行数据,将其标记为插入、更新、删除或拒绝。事务控制决定何时将写入的行数据永久生效。两者回答不同的问题,通常一起使用。

云数据集成提供了自己的事务控制转换,其中包含相同的提交、回滚和继续变量。设计理念得以保留,但对象是在云映射中构建的。ping 在 Designer 中,而不是在 PowerCenter 客户端中。

该事务中自上次提交以来写入的行将被丢弃。任何更早提交的内容都会保留在目标表中,这就是为什么提交点的位置决定了失败可能造成的工作量。

总结一下这篇文章: