查找转换(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. 搭建企业级NFS网络文件共享服务说明[一]

    1.1.0. 概述: 共享/NFS目录给整个192.168.25.0/24网段主机读写 man nfs 可以查看mount的信息 rpc端口111 nfs主端口2049 1.1.1. 搭建NFS环境 ...

  2. 17 汽车服务工程 李腾飞 MP4

  3. 铁乐学python_day28_模块学习3

    大部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ OS模块复习一二 >>> import os >>> os.getcwd() ...

  4. Hadoop HBase概念学习系列之HBase里的高表设计概念(表设计)(二十八)

    在下面这篇博文里,我给各位博客们,分享了创建HBase表,但这远不止打好基础. HBase编程 API入门系列之create(管理端而言)(8) 在关系型数据库里,表的高表和宽表是不存在的.在如HBa ...

  5. Civil War

    Civil War 编辑 <Civil War>是美国硬摇滚乐队枪炮与玫瑰的一首单曲,首次收录于1990年的群星慈善专辑<Nobody's Child: Romanian Angel ...

  6. 利用NET HUNTER建立一个自动文件下载的网络接入点

    免责声明:本文旨在分享技术进行安全学习,禁止非法利用. 本文中我将完整的阐述如何通过建立一个非常邪恶的网络接入点来使得用户进行自动文件下载.整个过程中我将使用 Nexus 9 来运行Kali NetH ...

  7. centos 增加网卡

    CentOS 6添加网卡的方法 (2013-11-26 17:19:44) 转载▼ 标签: it 分类: Linux 前段时间安装了1台XEN server虚拟机,之前只用了1个网卡,ip是10.11 ...

  8. 打包dll发布到nuget服务器

    几个月前上传过一次nuget包,结果好久不用,今天想更新下,完全忘记了怎么用了,又是一顿查,所以决定记录下来,当然这可能不是一个傻瓜式的教程,但聪明的你们应该能够看明白的,因为整体操作还是很简单的 好 ...

  9. 优化升级logging封装RotatingFileHandler

    1.升级优化,提供用户自定义日志level文件夹生成控制,提供日志错误显示到日志打印异常补获到日志 # coding=utf-8 import logging import time import o ...

  10. Debian 8 安装 Qt5 和 go-qml

    一.安装相关依赖 ~ ᐅ sudo apt-get install build-essential libgl1-mesa-dev ~ ᐅ sudo apt-get install qt5-defau ...