SSIS Lookup转换未匹配预期记录问题咨询
排查SSIS Lookup全未匹配的问题
我来帮你排查这个SSIS Lookup全不匹配的坑,这种情况多半和数据类型、测试操作细节或者缓存加载时机有关,咱们一步步捋清楚:
先确认目标表的实际数据状态
你提到测试时截断了Lookup目标表——那截断后目标表里可是完全没有记录的,这时候Lookup自然匹配不到任何数据啊!是不是你截断后忘记重新插入要匹配的CustomerID记录了?先去数据库里查一下目标表,确保里面确实存在和输入文件相同的CustomerID值,这是最基础的前提。排查数据类型的隐式转换问题
输入文件的CustomerID是8字节有符号整数,目标表是BigInt,理论上类型是匹配的,但SSIS处理平面文件时很容易出现类型识别偏差:- 打开平面文件连接管理器,检查CustomerID的数据类型是不是真的设成了
DT_I8(对应8字节有符号整数),有没有误设成DT_STR/DT_WSTR字符串类型?如果是字符串类型,哪怕数值看起来一样,和目标表的BigInt做Lookup也会因为类型不匹配导致全不匹配。 - 检查Lookup转换的匹配条件,是不是只做了输入列和目标列的相等比较?有没有不小心加了额外的过滤条件(比如日期范围、状态字段)?
- 打开平面文件连接管理器,检查CustomerID的数据类型是不是真的设成了
核对Lookup缓存模式的加载时机
你尝试了三种缓存设置,但如果目标表在缓存加载后才插入数据,那不管哪种模式都白搭:- 完全缓存模式:包启动时就会把目标表数据加载到内存缓存,如果加载之后你才往目标表插数据,缓存里还是空的,所以要确保缓存加载前目标表已经有数据。
- 部分缓存/无缓存模式:虽然是实时查询目标表,但如果有锁表或者权限问题,也可能查不到数据,不过这种情况比较少见,可以先排除前面的问题再考虑。
启用调试日志定位具体问题
可以给Lookup转换开日志,直接看不匹配的细节:- 右键Lookup转换选择「编辑」,在「高级」选项卡勾选「启用日志记录」;
- 在包的日志设置里添加Lookup的
LookupNoMatch事件; - 运行包后查看日志里的不匹配值,和目标表的数据对比,看是不是值本身有隐藏差异(比如前导空格、不可见字符,不过数值类型一般不会有这个问题,但还是要确认)。
手动测试SQL匹配情况
直接在数据库里跑一条SQL:SELECT * FROM 目标表 WHERE CustomerID = 你的输入CustomerID值,看能不能查到结果。如果SQL能查到但SSIS Lookup查不到,那肯定是SSIS的数据类型或者转换设置出了问题。
内容的提问来源于stack exchange,提问作者Geeco2
相关产品推荐
相关产品推荐

