SSIS 2019 LookUp转换输出与文件内容比对功能实现问询
SSIS 2019 对应需求实现方案
你可以通过组合SSIS标准转换组件实现需求,无需额外自定义开发,具体方案如下:
1. 控制流层先做文件存在性校验
- 在控制流中新增Script Task或
File Properties Task检测目标文件是否存在,将检测结果存入布尔类型的包变量,例如@[User::IsTargetFileExist] - 配置两个Data Flow Task分支,通过优先约束的表达式判断走哪个分支:
- 表达式为
@[User::IsTargetFileExist] == True时,走带文件比对逻辑的数据流 - 表达式为
@[User::IsTargetFileExist] == False时,走直接处理上游Lookup输出的数据流
- 表达式为
2. 文件存在场景的数据流组件配置
这个分支的数据流按如下顺序组合组件即可实现比对逻辑:
- 首先接入你已经配置完成的上游Lookup Transformation,输出已匹配的目标列
- 新增平面文件源组件,读取目标文件的全部内容,需确保文件中用于比对的字段,和上游Lookup输出的对应比对字段数据类型、长度、排序规则完全一致,这是此前比对失效的最常见原因
- 新增第二个Lookup Transformation(可命名为「文件内容匹配校验」),按如下规则配置:
- 常规选项卡:缓存模式选「完全缓存」,参考数据集选择刚才配置的平面文件源输出
- 列选项卡:将上游Lookup输出的比对字段,和平面文件源的对应匹配字段一一拖拽映射
- 错误输出选项卡:将「不匹配的项」设置为
重定向到无匹配输出
- 后续处理流程直接对接该Lookup的无匹配输出即可,这部分就是你需要的、和现有文件内容无重复的行
可选替代方案:Merge Join 实现大数量场景比对
如果你的数据量较大,不想用双Lookup缓存模式,可以用Merge Join组合组件实现:
- 上游Lookup输出和平面文件源输出,分别新增Sort转换,按比对关键字段做升序/降序排序
- 新增Merge Join转换,两个输入分别对接两个Sort的输出,连接类型选择「左外连接」
- 配置Join列一一对应后,输出列仅保留上游Lookup的全部业务列,以及文件源的唯一标识列(如主键ID)
- 新增条件拆分转换,设置拆分条件为
ISNULL(文件源主键ID) == TRUE,满足该条件的输出就是无匹配的行,直接对接后续流程即可
常见匹配失效排查
如果出现字段明明一致但匹配不上的情况,优先排查两点:
- 两侧比对字段的数据类型、是否允许空值、排序规则是否完全一致
- 字符串类型字段可提前通过派生列转换做
TRIM()、UPPER()统一格式化,消除前后空格、大小写差异导致的匹配失效
内容的提问来源于stack exchange,提问作者AMDI
相关产品推荐
相关产品推荐

