在IICS全参数化映射中基于最大值生成递增D_REGION_CODE_ID的方法
解决方案:IICS全参数化映射中生成基于目标表最大值的递增代理键
针对你在全参数化IICS映射中遇到的问题,以下是无需新增Sequence Generator、无需自定义Lookup SQL的可行方案:
核心思路
先获取目标表D_REGION_CODE_ID的全局最大值,将该值广播到所有源记录,再结合行号生成每条记录的递增ID。
具体实现步骤
1. 读取目标表并计算全局最大值
- 添加一个Source Qualifier,参数化读取目标表(使用
$$TARGET_TABLE这类参数,符合全参数化要求),仅选择D_REGION_CODE_ID列。 - 连接Aggregator Transformation,不设置任何分组条件,直接计算全局最大值:
这个Aggregator会输出单行数据,即目标表当前的最大ID值(若目标表为空则返回NULL)。MAX(D_REGION_CODE_ID) AS MAX_D_REGION_ID
2. 将全局最大值关联到所有源记录
- 给源数据的Expression Transformation添加一个常量列:
JOIN_KEY = 1 - 给Aggregator输出的单行数据也添加一个相同的常量列
JOIN_KEY = 1。 - 使用Joiner Transformation,以
JOIN_KEY为连接键做等值连接。这样每条源记录都会和最大值行关联,带上全局最大值MAX_D_REGION_ID。
3. 生成递增代理键
- 添加另一个Expression Transformation,计算最终的
D_REGION_CODE_ID:IIF(ISNULL(MAX_D_REGION_ID), ROW_NUMBER() OVER (ORDER BY REGION_CODE), MAX_D_REGION_ID + ROW_NUMBER() OVER (ORDER BY REGION_CODE) )- 排序列
REGION_CODE可替换为源表的唯一键(若存在),保证ID生成顺序稳定; - 当目标表为空时,直接从1开始生成行号;若已有最大值,则从
MAX+1开始递增。
- 排序列
4. 映射收尾
- 将处理后的字段(
REGION_CODE、生成的D_REGION_CODE_ID、TIER)连接到目标表,完成插入。
为何之前的方案失效?
你用Connected Lookup仅拿到单行值,是因为Connected Lookup会为每条源记录发起一次查询,若目标表中只有最大值的单行数据,只有一条源记录能匹配成功,其余记录会丢失。而通过Aggregator+Joiner的方式,能将全局最大值广播到所有源记录,避免数据丢失。
内容的提问来源于stack exchange,提问作者rohanK0602
相关产品推荐
相关产品推荐

