Informatica多会话限数取数及二次运行读新记录配置方法
Informatica平面文件分批推送配置方案
问题1:单会话固定读取200条记录的正确配置
不要直接在并发会话上配置源端"读取行数限制",也不要在并发会话内独立生成序列计数,会出现重复读、序号错乱的问题,按以下步骤配置:
- 前置预处理:将当前流程中第一个读取CSV的session1设为单线程运行,在该会话的映射中添加Sequence Generator转换,起始值设为1、步长设为1,为源文件每一行生成全局唯一连续的行号字段
global_row_num。生成带行号的数据集后落地到临时表/临时平面文件,后续所有并发会话统一读取该预处理后的数据集,禁止直接并发读取原始CSV。 - 并发会话行区间分配:给5个并发会话分别配置Filter转换过滤条件,固定每个会话的读取区间,单会话严格读取200条:
- s2过滤条件:
global_row_num >= ($$BATCH_START + 1) AND global_row_num <= ($$BATCH_START + 200) - s3过滤条件:
global_row_num >= ($$BATCH_START + 201) AND global_row_num <= ($$BATCH_START + 400) - s4过滤条件:
global_row_num >= ($$BATCH_START + 401) AND global_row_num <= ($$BATCH_START + 600) - s5过滤条件:
global_row_num >= ($$BATCH_START + 601) AND global_row_num <= ($$BATCH_START + 800) - s6过滤条件:
global_row_num >= ($$BATCH_START + 801) AND global_row_num <= ($$BATCH_START + 1000)
其中$$BATCH_START为工作流变量,代表当前批次的起始行号。
- s2过滤条件:
问题2:工作流断点续读下一批次记录配置
通过独立位点表记录已处理进度,不要依赖文件偏移量配置(源文件调整顺序、增删行时偏移量会完全失效),配置步骤如下:
- 建位点控制表:在数据库中建一张仅存1条记录的控制表,字段为
last_processed_row_num(数值型,初始值为0,记录已完成推送的最后一行行号),可选加update_time字段记录最后更新时间方便排查。 - 工作流启动赋值:在session1之前添加Assignment Task,工作流启动时先查询控制表取到
last_processed_row_num值,赋值给工作流变量$$BATCH_START,当前批次的读取范围即为$$BATCH_START + 1到$$BATCH_START + 1000。 - 成功后更新位点:在所有并发会话全部执行成功的分支后,添加SQL Task执行更新语句,将控制表的
last_processed_row_num更新为$$BATCH_START + 1000;如果工作流中途执行失败,不触发位点更新,下次运行会自动重跑当前失败批次,不会丢数、跳数。 - 源文件追加适配:如果源CSV会持续在末尾追加新记录,只要session1读取CSV生成
global_row_num时保持和源文件行序一致,新追加的行会自动分配到连续的行号,后续批次会自动读取处理,无需额外调整配置。
踩坑提醒:禁止在并发会话中独立生成行号、禁止直接给并发会话配置源端"读取N行"属性,这两种配置在并发场景下会导致多个会话读取到重复的行,最终向WebService推送重复数据。
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

