Informatica中基于多条件循环处理数据的实现方案问询
Informatica实现按优先级匹配并填充VAL字段的解决方案
核心思路
不需要依赖Informatica的循环组件,通过数据流分支+优先级排序+合并去重的方式模拟“循环重试”逻辑:优先匹配同ID下type='P'的记录,无结果则用type='C'重试,均失败则VAL为Null;非P/C类型直接匹配,无结果则VAL为Null。
具体实现步骤
1. 数据源关联
用Joiner组件将FF1(左表)与FF2(右表)按ID做左连接,确保FF1的所有ID都被保留(即使FF2中无对应记录)。输出字段包括:FF1.ID、FF2.type、FF2.SecurityID。
2. 数据路由分支
添加Router组件,将数据分为4个分支:
- 分支1:
type = 'P' - 分支2:
type = 'C' - 分支3:
type NOT IN ('P','C') - 分支4:
ISNULL(type)(FF1的ID在FF2中无匹配记录)
3. 分支1(type='P')处理
- 用Joiner组件与tbl1按
SecurityID = SECURITYID做左连接,获取匹配的VAL值。 - 添加Expression组件,标记匹配状态:
Is_P_Matched = IIF(ISNOTNULL(VAL), 1, 0) Priority = 1 -- 最高优先级
4. 分支2(type='C')处理
- 先与分支1的输出按
ID做左连接,过滤掉同ID下分支1已匹配成功的记录:Filter Condition: Is_P_Matched = 0 OR ISNULL(Is_P_Matched) - 剩余记录再与tbl1按
SecurityID = SECURITYID左连接,获取VAL值。 - 添加Expression组件,标记匹配状态:
Is_C_Matched = IIF(ISNOTNULL(VAL), 1, 0) Priority = 2 -- 次优先级
5. 分支3(非P/C类型)处理
- 直接与tbl1按
SecurityID = SECURITYID左连接,获取VAL值。 - 添加Expression组件,设置优先级:
Priority = 3
6. 分支4(无FF2匹配记录)处理
- 直接用Expression组件设置:
VAL = NULL Priority = 4
7. 合并与去重
- 用Union组件合并4个分支的所有输出,确保字段一致(ID、VAL、Priority)。
- 添加Sorter组件,按
ID升序、Priority升序排序(优先级高的记录排在同ID的最前面)。 - 添加Delete Duplicates组件,按
ID分组,保留每组的第一条记录(即同ID下优先级最高的匹配结果)。
8. 加载到目标表
将最终处理后的ID和VAL字段加载到目标表即可。
示例验证
假设输入数据:
- FF1:
ID= [1,2,3,4] - FF2:
ID type SecurityID 1 P S1 1 C S2 2 C S3 3 X S4 4 P S5 - tbl1:
SECURITYID VAL S2 100 S3 200 S5 300
最终目标表输出:
| ID | VAL |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 3 | NULL |
| 4 | 300 |
内容的提问来源于stack exchange,提问作者sha12
相关产品推荐
相关产品推荐

