在 Abinitio 的更新 Table 组件中再次传递现有记录以进行更新
Passing Existing Record For Update Again In Update Table Component In Abinitio
如果像更新 table 组件一样发送一条已存在的记录用于更新查询,会发生什么情况?它会闲置吗?
我有一个 abinitio 输出文件,其中包含要更新(未插入)的记录。我只需要收集那些实际更新的记录。那么我们如何将DB中与之前完全相同(未更新)且至少更新了一个字段的记录分开呢?
这是一个 ETL 问题,因为无论行是否发生更改,DB2 都会进行更新。我不了解 Ab Initio 的详细信息,但您必须在 DB2 更新之前进行更改检测。
通常 ETL 工具有某种 "Change Capture" / "Compare" / "Difference" 函数来检测变化。
您可以尝试在更新 Table 组件中使用未使用的端口,同时查看 ActionRequired 标志。
一个简单的方法来确定是否会发生更新,或者更好的是,只提供更新只是从数据库中加入数据(select 声明将 select 每条记录由您的更新文件更新),并将其与记录中所有字段的数据库作为键连接。在与更新文件相关的未使用端口上出现的那些记录将执行更新操作。
我的第一种方法与 Alex 所建议的相同,但似乎以所有字段作为键加入 DB 将花费更多时间和资源。更好的方法是比较现有值和要在重新格式化 select 参数或按每个字段的表达式筛选器中更新的新值。这将仅提供那些实际将被更新的记录。
另外 Michael 是对的,DB2 将进行更新,而不管它是否是实际更新。所以,未使用的端口不会给出未更新的记录。
如果像更新 table 组件一样发送一条已存在的记录用于更新查询,会发生什么情况?它会闲置吗?
我有一个 abinitio 输出文件,其中包含要更新(未插入)的记录。我只需要收集那些实际更新的记录。那么我们如何将DB中与之前完全相同(未更新)且至少更新了一个字段的记录分开呢?
这是一个 ETL 问题,因为无论行是否发生更改,DB2 都会进行更新。我不了解 Ab Initio 的详细信息,但您必须在 DB2 更新之前进行更改检测。 通常 ETL 工具有某种 "Change Capture" / "Compare" / "Difference" 函数来检测变化。
您可以尝试在更新 Table 组件中使用未使用的端口,同时查看 ActionRequired 标志。
一个简单的方法来确定是否会发生更新,或者更好的是,只提供更新只是从数据库中加入数据(select 声明将 select 每条记录由您的更新文件更新),并将其与记录中所有字段的数据库作为键连接。在与更新文件相关的未使用端口上出现的那些记录将执行更新操作。
我的第一种方法与 Alex 所建议的相同,但似乎以所有字段作为键加入 DB 将花费更多时间和资源。更好的方法是比较现有值和要在重新格式化 select 参数或按每个字段的表达式筛选器中更新的新值。这将仅提供那些实际将被更新的记录。 另外 Michael 是对的,DB2 将进行更新,而不管它是否是实际更新。所以,未使用的端口不会给出未更新的记录。