在 Abinitio 的更新表组件中再次传递现有记录以进行更新

Posted

技术标签:

【中文标题】在 Abinitio 的更新表组件中再次传递现有记录以进行更新【英文标题】:Passing Existing Record For Update Again In Update Table Component In Abinitio 【发布时间】:2016-07-23 15:02:21 【问题描述】:

如果一个已经存在的记录被发送到一个更新查询组件,会发生什么?它会被闲置吗?

我有一个 abinitio 输出文件,其中包含要更新(未插入)的记录。我只需要收集那些实际更新的记录。那么,我们如何才能将数据库中与之前完全相同的记录(未更新)和至少更新了一个字段的记录分开呢?

【问题讨论】:

为什么同时使用数据库和 Ab Initio 进行标记?工作在哪里完成? 我在更新表组件(abinitio)中使用更新/插入查询来加载数据库 dB2。你能回答我的问题吗? 【参考方案1】:

这是一个 ETL 问题,因为无论行是否发生更改,DB2 都会进行更新。我不详细了解 Ab Initio,但您必须在 DB2 更新之前进行更改检测。 通常 ETL 工具具有某种“更改捕获”/“比较”/“差异”功能来检测更改。

【讨论】:

【参考方案2】:

您可以尝试使用更新表组件中的未使用端口,同时查看 ActionRequired Flag。

确定是否会发生更新的简单方法,或者更好的是,仅提供更新,是连接数据库中的数据(选择语句将选择更新文件要更新的每条记录),并且将它与记录中所有字段的数据库作为键连接。那些出现在与更新文件相关的未使用端口上的记录将执行更新操作。

【讨论】:

【参考方案3】:

我的第一种方法与 Alex 建议的方法相同,但似乎以所有字段为键加入数据库将需要更多时间和资源。更好的方法是在重新格式化选择参数或按每个字段的表达式过滤器中比较现有值和要更新的新值。这将只给出那些将实际更新的记录。 Michael 也是对的,DB2 将更新,无论它是否是实际更新。所以,未使用的端口不会给出未更新的记录。

【讨论】:

以上是关于在 Abinitio 的更新表组件中再次传递现有记录以进行更新的主要内容,如果未能解决你的问题,请参考以下文章

使用从我的 C# 应用程序传递的值列表更新兴趣表

在无状态组件中的现有状态转换期间无法更新

如何从两个现有对象正确创建对象

Angular:可编辑表作为现有组件

如何制作一个自动更新 Hive 的表

ETL工具kettle基础--插入更新组件