查找转换(Lookup)组件用于实现两个数据源的连接,实现的方式是嵌套循环。查找转换通常在内存中缓存查找数据集,然后在输入管道中,把输入数据的每一行都和缓存中的查找数据集进行比较,并输出匹配成功和失败的数据行。

在数据流任务中,应用Lookup转换组件,需要配置:

  • 输入数据:是上游数据流输出到查找转换的数据;
  • 查找数据:用于查找的数据集,通常缓存到内存中;
  • 两个输出:一个是输出匹配成功的数据,一个是输出匹配不成功的数据。上游数据流的一行数据跟整个查找集进行匹配,如果匹配成功,那么输出匹配成功的数据,否则,输出匹配不成功的数据;
  • 比较逻辑:Lookup 转换组件采用的等值比较方式,当比较列相等时,匹配成功;当比较列和查找集中的任一数据行都不相等时,匹配失败;
  • 比较列映射:从输入数据和查找数据中,设置用于比较的字段;

通常情况下,Lookup转换组件的设计图如下示例:

一,设置查找数据集

在查找转换中,输入数据集的每一行数据都和查找数据集的全集进行匹配,因此,查找数据集的读写速度影响查找转换的性能。Lookup转换组件支持三种缓存模式来读写查找数据集,

  • Full Cache:把查找数据集全部缓存到内存中
  • Partial Cache:把查找数据集的部分数据缓存到内存中,可以设置占用的缓存大小
  • No Cache:不缓存查找数据集,几乎不占用任何内存

如果数据集较小,可以把查找数据集全部缓存到内存中,这种模式通常是最快的。如果查找数据集太过庞大以至于无法把所有数据缓存到内存中,可以选择No Cache模式或者部分缓存模式。对于不缓存模式,当每个输入行流经查找表时,查找组件向数据库服务器发送一条请求,以便执行匹配查找,这会给数据库系统带来沉重的性能开销,该模式是最差的模式,请慎重使用。

而部分缓存模式提供了介于全缓存和No Cache之间的这种方案,在该模式中,转换组件只缓存最近使用的数据集,一旦缓存增长过大,超出系统设置的缓存大小的阈值,那么最少使用的缓存数据就会被丢弃。当包启动时,与No Cache模式一样,转换组件不会把数据预先加载到缓存中。当每个输入行进入查找转换组件时,该组件使用指定键尝试从查找数据集中查找记录,如果查找到匹配行,那么把该行数据加载到本地缓存中。如果相同的输入键再次进行查找转换,那么就可以从本地缓存中获取匹配值,而不需要从查找数据集中,从而节省了因为访问书库而产生的时间。然而,如果在本地缓存中没有找到键,那么组件将访问数据库以检查查找数据集。请注意,键不在本地缓存中的原因有很多:可能是第一次查找该键,可能是以前在本地缓存中,但是由于内存压力而释放,或者是查找数据集中不存在该键。

如果输入行不存在与本地缓存中,也不存在于查找数据集中,那么组件会把该行视为不匹配行,发送到不匹配行的输出。如果,输入数据集中不匹配的数据行出现的频率很高,那么,为了避免重复调用数据库,同时获得部分缓存模式带来的好处,可以使用查找转换的另外一个功能:缺失缓存,让组件记忆先前没有从查找表中找到的键值,从而避免重复查找该值所付出的代价,也就是,SSIS引擎分配部分内存,用于缓存匹配失败的键值,这样,一旦输入行和缺失缓存中的值匹配成功,那么就说明该行不会匹配查找数据集;但是,一旦输入行和缺失缓存中的键值都不匹配,那么就需要从本地缓存或者查找数据集中进行二次匹配,也会付出相应的代价。因此,应根据数据的分布,选择是否使用缺失缓存。

1,设置缓存模式

由于上游数据流的每一行都要和查找数据集的所有行进行匹配,因此,对查找数据集的访问是非常频繁的,为了提高性能,必须提高对查找数据集的访问速度。如果系统的内存资源允许,那么,首选Full Cache模式,把查找数据集驻留在内存中,最大可能地提高转换查找的执行性能。Full Cache是默认模式,在大多数情况下,该模式可以获得最佳性能。

2,设置链接管理器的类型

查找转换需要从外部数据源中导入查找数据集,链接管理器类型有两种:

  • Cache Connection manager:缓存链接管理器,把数据缓存到内存
  • OLE DB Connection mananger:从OLE DB 数据源中加载数据

3,缓存链接管理器

对于缓存链接管理器,需要用户手动输入数据列,并选择数据类型(Type),长度(Length),代码页(Code Page),索引位置(Index Position),其中,Index Position 用于标识当前的数据列是否是索引列。

当Index Position为1,标识当前列是索引列,用于比较;当Index Position为0,标识当前列不是索引列,虽然该列不能用于比较,但是可以替换输入列。

注意,Cache Connection manager仅仅是创建内存的架构(Schema),但是数据存储在哪里呢?这就需要使用 Cache Conversion把数据源中的数据导入到缓存中。

4,设置比较列映射

在查找转换的Columns选项卡中设置比较列映射,使用Code和Codex进行等值比较,即on子句的比较条件。

如果需要使用查找集来代替上游数据流输入,可以勾选Available Lookup Columns的非查找列(index 列没有放大镜的列),然后在Lookup operations中选择Replace。如果要将lookup columns增加到输出流中,在Lookup operations中选择add as new column。

5,配置查找转换的输出

查找转换的输出有两个:匹配成功始终有输出,但是需要配置匹配不成功的输出,如下图:

Redirect rows to no match output :把匹配失败的数据行输出到no match的输出中。

二,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。

变通方法是把:匹配失败的数据行重定向到no macth output。在General选项卡中,将Specify how to handle rows with no matching entries 指定为 Redirect rows to no match ouput.

Lookup 转换组件的更多相关文章

  1. Informatica PowerCenter 常用转换组件一览表

    原文地址:https://blog.csdn.net/yongjian1092/article/details/52176018 转换类型: 积极转换(Active):可以更改通过它来传递的数据行数, ...

  2. Informatica Lookup Transformation组件的Connect 与Unconnected类型用法

    Informatica Lookup Transformation组件的Connect 与Unconnected类型用法及区别:下面是通一个Lookup在不同Mapping中的使用: 1. Conne ...

  3. OLEDB 命令转换组件的用法

    在数据流任务组件中,OLEDB 命令转换组件对输入的每行数据调用TSQL,该组件能够把输入的数据作为参数,因此,该转换组件主要用于运行参数化的查询. 命令转换组件的配置十分简单,只有三个可编辑属性,位 ...

  4. 【React 6/100】 React原理 | setState | JSX语法转换 | 组件更新机制

    ****关键字 | setState | JSX语法转换 | 组件更新机制 组件更新机制 setState() 的两个作用 修改state 更新组件 过程:父组件重新渲染时,也会重新渲染子组件,但只会 ...

  5. InkWell容器 和 官方自带日期组件 和第三方 日期格式转换组件

    带点击事件的容器 InkWell( child: Text('时间'), onTap: _showTimePicker,),   Flutter 日期和时间戳 日期转化成时间戳: var now = ...

  6. 亿信BI——维度转换组件使用

    功能模块: 用户点击"维度转换"模块进行维度转换操作,维度转换页面的顶部导航栏包括基本属性和转换设置两部分. 基础属性: 在基本属性模块部分,编号.标题和类型是必填项且系统已经默认 ...

  7. SSIS 数据流的连接和查找转换

    在SSIS的数据流组件中,SSIS引擎使用Merge Join组件和 Lookup组件实现TSQL语句中的inner join 和 outer join 功能,Lookup查找组件的功能更类似TSQL ...

  8. SSIS 剖析数据流之:连接和查找转换

    在SSIS的数据流组件中,SSIS引擎使用Merge Join组件和 Lookup组件实现TSQL语句中的inner join 和 outer join 功能,Lookup查找组件的功能更类似TSQL ...

  9. SSIS教程:创建简单的ETL包 -- 1. 创建项目和基本包

    在本课中,将创建一个简单 ETL 包,该包可以从单个平面文件(Flat File)源中提取数据,使用两个查找转换组件转换该数据,然后将该数据写入AdventureWorksDW2012 的 FactC ...

随机推荐

  1. IntelliJ IDEA2017/2018 激活方法 破解补丁激活(亲测可用)(注册码方法以和谐)

    IntelliJ IDEA2017 激活方法(注册码方法以和谐): 搭建自己的授权服务器,对大佬来说也很简单,我作为菜鸟就不说了,网上有教程. 我主要说第二种,现在,直接写入注册码,是不能成功激活的( ...

  2. 铁乐学python27_模块学习2

    大部份内容摘自博客http://www.cnblogs.com/Eva-J/ collections模块 在内置数据类型(dict.list.set.tuple)的基础上, collections模块 ...

  3. PostProcess崩溃

    1.__debugbreak 功能暂停程序执行,打开调试器,进入调试模式. 2.重要参考: https://blog.csdn.net/phenixyf/article/details/4930457 ...

  4. Zeal——好用的离线 API 文档大全!

    介绍 作为一名程序员,工作中学习中免不了是要查询API文档的,毕竟我们能记住的东西有限,而且经常也会碰到某个API一时想不起来的情况,而每次还要打开网页去查询还是挺麻烦的,这时候拥有一个款好用的本地离 ...

  5. win8中常见问题排查

    1. 无法使用内置管理员账户打开 1.1 启动组策略编辑器:运行中“gpedit.msc”,1.2 依次展开“计算机配置”--->“Windows设置”--->“安全设置”--->“ ...

  6. ios的图片解压

    YYKit SDWebImage FLAnimatedImage YYKit YYCGImageCreateDecodedCopy YYImageCoder 1 2 3 4 5 6 7 8 9 10 ...

  7. leetcode第一刷_N-Queens

    八皇后问题应该是回溯法的教学典范.在本科的时候,有一门课叫面向对象.最后的附录有这个问题的源码.当时根本不懂编程,照抄下来,执行一下出了结果都非常开心,哎. 皇后们的限制条件是不能同行同列,也不能同对 ...

  8. Oracle学习(十一):PL/SQL

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...

  9. oracle删除用户及其表空间

    oracle删除用户及其表空间 删除表空间:可以先将其offlinealter tablespace xx offline;将磁盘上的数据文件一同删除drop tablespace xxx inclu ...

  10. 2733. [HNOI2012]永无乡【平衡树-splay】

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...