(2) 自动生成的Mapping:
(3) 逻辑分析:
<1> 源表数据首先通过Lookup组件,根据自己设置的逻辑主键查找每条数据是否在目标表中存在。
<2> 经过Lookup之后的数据进入Expression组件,此组件中根据查找的目标表PM_PRIMARYKEY列生成两个字段ChangedFlag、NewFlag,当数据需要插入时NewFlag为true,当数据需要更新时ChangedFlag为true。
<3> Expression组件之后的两个过滤器分别根据ChangedFlag,NewFlag字段是否为true,判断对目标表执行Insert或Update操作。
<4> 当目标表数据不存在时,PM_PRIMARYKEY字段为NEXTVAL * 1000(每条记录预留1000个历史版本),PM_VERSION_NUMBER字段为0。当目标表数据存在时,则PM_PRIMARYKEY字段和PM_VERSION_NUMBER字段均为原目标原有数据的PM_PRIMARYKEY字段 + 1。 (4) 运行效果:
<1> 运行Mapping之前: 源表:
目标表:
<2> 运行Mapping之后: PowerCenter日志:
目标表:
2.2.2.2 标志方式
(1) 选择标记方式:
(2) 自动生成的Mapping:
(3) 逻辑分析:
<1> 源表数据首先通过Lookup组件,根据自己设置的逻辑主键查找每条数据是否在目标表中存在。
<2> 经过Lookup之后的数据进入Expression组件,此组件中根据查找的目标表PM_PRIMARYKEY列生成两个字段ChangedFlag、NewFlag,当数据需要插入时NewFlag为true,当数据需要更新时ChangedFlag为true。
<3> Expression组件之后的两个过滤器分别根据ChangedFlag,NewFlag字段是否为true,判断对目标表执行Insert或Update操作。
<4> 当目标表数据不存在时,PM_PRIMARYKEY字段为NEXTVAL * 1000(每条记录预留1000个历史版本),PM_CURRENT_FLAG字段为1。当目标表数据存在时,则又分为两条数据流,一条数据流将已存在数据PM_CURRENT_FLAG字段改为0,另一条数据流则插入新记录,PM_PRIMARYKEY字段为原目标数据的PM_PRIMARYKEY字段 + 1,PM_CURRENT_FLAG字段为1。 (4) 运行效果:
<1> 运行Mapping之前: 源表:
目标表:
<2> 运行Mapping之后: PowerCenter日志:
目标表:
2.2.2.3 时间戳方式 (1) 选择标记方式:
(2) 自动生成的Mapping:
(3) 逻辑分析: