Informatica无数据库仅用平面文件如何实现链式值迭代更新
Informatica无数据库环境下平面文件链式值更新实现方案
不用搞复杂的逐轮迭代刷数逻辑,核心思路是先把所有链式映射的最终值找全,生成一张「原值→最终值」的静态映射表,再直接关联替换业务数据即可,全程只用平面文件和Informatica原生转换组件,不需要数据库支撑。
具体实现步骤
1. 预生成全量终值映射表
先把提供的Old_Value/New_Value两列映射平面文件导入作为源,单独跑一个映射生成完整的终值对应关系:
- 第一次读入映射文件后,先接聚合转换,把所有Old_Value聚合成一个用固定分隔符(比如逗号)拼接的长字符串,示例里聚合结果为
57,55,43,41,将这个字符串作为常量端口输出。 - 后接表达式转换,新增三类端口:
- 输入端口承接聚合后的Old_Value全量串、当前行Old_Value、当前行New_Value
- 变量端口
v_is_end:通过indexof(Old_Value全量串, to_char(New_Value)) == 0判断当前New_Value是否存在于Old_Value列表中,等于0就说明这个值是映射链的终值 - 输出端口
final_value:初始值取当前行New_Value
- 串接固定轮次的Joiner做自关联即可,轮次设置为比映射表总记录数多1就完全够用,比如示例共4条映射规则,连4次Joiner就能覆盖所有链式层级:每一轮Joiner都拿上一轮输出的
final_value跟原始映射源的Old_Value做左连接,能匹配到就把final_value更新为对应New_Value,匹配不到就保留原有final_value,跑完预设轮次后所有记录的final_value就是链上的最终值,比如示例里41、43、55、57对应的final_value全为59。 - 最终把这张全量映射输出为本地平面文件留存即可,除非映射规则调整,否则不用每次跑业务任务都重新生成。
2. 业务数据值替换
处理实际业务数据时流程非常简单:
- 导入待更新的业务平面文件作为主源,导入之前生成的终值映射平面文件作为参考源
- 接Joiner转换,用业务文件中需要更新的字段跟映射文件的Old_Value做左连接,匹配不到映射的记录保留原值即可
- 将原业务字段值替换为匹配到的
final_value,后续接正常的业务转换逻辑,最终输出到目标平面文件就完成了。
避坑提示
- 别上来就对着业务数据按规则顺序做迭代更新,不仅效率差,还很容易因为更新顺序搞反出问题:比如要是先执行57→59,再执行55→57,再执行43→55,最后执行41→43,数据里会残留刚更新出来的57、55、43这些中间值,根本达不到所有链上值统一更新为终值的效果,先算终值再直接替换是最稳不出错的方案。
- 自关联轮次不用卡得太精确,一般映射规则层级不会超过10层,串10次Joiner处理平面文件也就几秒的事,数据量不大的话完全没有性能压力。
- 如果映射规则调整频繁,可以在生成终值映射的流程末尾加个简单判断:对比前后两轮输出的final_value集合,如果两轮值完全一致就提前终止流程,不用跑完预设轮次,这个判断用表达式转换或者轻量Java转换就能实现,不需要数据库支持。
示例规则跑完生成的终值映射表如下:
Old_Value Final_Value 57 59 55 59 43 59 41 59
内容的提问来源于stack exchange,提问作者Dpc
相关产品推荐
相关产品推荐

