Lookup是查找的意思,Lookup组件实现两个数据源的连接,和Join语句实现的功能类似,使用Lookup 组件需要配置:
- 两个输入:一个是上游数据流的输入Source Table,一个是要查找的数据集 Lookup Table;
- 两个输出:一个是输出匹配成功的数据,一个是输出匹配不成功的数据。上游数据流的一行数据跟整个查找集进行匹配,如果匹配成功,那么输出匹配成功的数据,否则,输出匹配不成功的数据;
- 比较逻辑:Lookup 组件等值比较,类似于join的on子句,on子句使用 “=” 进行条件判断;
- 比较列:从两个输入中设置等值比较的字段;
一,Lookup组件用法示例
创建测试数据:
1,Lookup 组件需要频繁访问Lookup Table,因此,缓存LookupTable有利于提高查找效率,Lookup组件支持三种缓存模式:FullCache,Partial Cache 和No Cache,这三种Cache Mode是针对lookup dataset的,由于上游数据流的每一行都要和lookup dataset的所有行进行匹配,对lookup dataset的访问是非常频繁的,为了提高性能,必须提高对lookup dataset的访问速度。如果内存允许,选择full cache,将lookup dataset的数据驻留在cache中,访问速度是最高的。
2,cache Connection manager是内存链接管理器,数据驻留在cache中。手动输入column,并选择type,length,codepage,index position。index position标识column是否是index column。index用于标识比较列,为1标识columnindex column,用于比较,为0标识该列不是index column,虽然不能用于比较列,但是可以用于replace 输入列。
3,cache Connection manager仅仅是标识内存的schema,但是数据源在哪里?需要使用 cache conversion将数据源中的数据导入到cache中。Codex前面有一个放大镜,标识该列是查找列,用于比较。
4,Lookup component 设置比较列mapping
在Lookup component的Columns选项卡中设置比较列mapping,Code和Codex进行比较,即on子句的比较条件。
如果需要使用查找集来代替上游数据流输入,可以勾选Available Lookup Columns的非查找列(index 列没有放大镜的列),然后在Lookup operations中选择Replace。如果要将lookup columns增加到输出流中,在Lookup operations中选择add as new column。
5,lookup component的输出有两个,匹配成功始终有输出,但是需要配置匹配不成功的输出,如图
Redirect rows to no match output :将没有匹配的行输出到匹配不成功的输出流中。
二,Lookup组件异常
Lookup组件有两个输入数据源,一个是上流组件的输出,一个是组件Lookup的数据源,这个数据源是在Connection选项卡中进行配置。在开发package的过程中,我发现一个异常,当Lookup数据源没有返回数据时,会产生异常。异常信息如下:
[Lookup [2]] Error: Row yielded no match during lookup.
[Lookup [2]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "Lookup" failed because error code 0xC020901E occurred, and the error row disposition on "Lookup.Outputs[Lookup Match Output]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
异常发生的原因是no match entries的输出,默认情况下Specify how to handle rows with no matching entries选项为Fail component。
Workaround:将没有匹配上的数据行重定向到no macth output。
在General选项卡中,将Specify how to handle rows with no matching entries 指定为 Redirect rows to no match ouput.