查找转换(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. Nginx 泛解析配置请求映射到多端口实现二级域名访问

    由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试 ...

  2. SpringBoot+MyBatis连接数据库

    SpringBoot通过MyBatis连接数据库有2种方法: 1.注解 2.XML文件 1.注解 1.构建项目 2.添加依赖: <dependencies> <dependency& ...

  3. linux面试总结

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识. ...

  4. 加速安装 Sharepoint 2013 SP1

    第一次安装把人吓了一跳,居然花了5个半小时.想想有一大堆服务器要升级,不得不想想有什么加速的办法. 试了好几种方法,以下的办法最为简单 1:停止 IIS ADMIN,WWW 服务 2:停止所有 sha ...

  5. .Net WebApi 支持跨域访问使用 Microsoft.AspNet.WebApi.Cors

    首先导入Cors库,通过程序包管理控制台导入 Install-Package Microsoft.AspNet.WebApi.Cors 引用库之后,我们需要进行简单的配置. 现在WebApiConfi ...

  6. 【转】.net core 一次坑爹的类库打包过程

    自己遇到这个问题,记录一下,原文链接:http://www.cnblogs.com/Hai--D/p/5776463.html. 众所周知,.net core 跨平台类库引用一定要通过nuget获得. ...

  7. Latex排版全解

    Latex排版全解 LATEX(英语发音:/ˈleɪtɛk/ LAY-tek或英语发音:/ˈlɑːtɛk/ LAH-tek,音译“拉泰赫”),是一种基于TEX的排版系统,由美国电脑学家莱斯利•兰伯特在 ...

  8. boost的初步了解

    本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心. 名字本身就说明了一切:Asio 意即异步输入/输出. 该库可以让 C++ 异步地处理数据,且平台独立. 异步数据处理就是指,任务 ...

  9. python开发_stat

    当我们使用os.stat(path)获取一个文件(夹)信息的时候, os.stat(path)本身返回的是一个元组如: nt.stat_result(st_mode=33206, st_ino=203 ...

  10. winform程序打包成exe文件

    拿到一个实现功能的winform小程序,如何利用NSIS工具制作安装包? 1.NSIS工具下载地址 点我下载 2.启动NSIS工具,如图点击 3.选择"使用脚本向导创建新的脚本文件" ...