码迷,mamicode.com
首页 > 其他好文 > 详细

数据的联接

时间:2016-05-20 00:42:28      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

SSIS Engine 使用Merge Join 转换和 Lookup转换实现SQL语句中的inner join 和 outer join 功能。任何流经Data Flow的数据都会被加载到内存的数据缓冲区中,数据缓冲区能够容纳的数据量决定了转换组件的性能。Lookup转换有一个输入,一个参考表(或叫缓存表,查找表) 和多个输出。对于输入中的每一个数据行,如果能够在参考表中找到相应的键值,那么该数据行匹配成功,从“Lookup Match Output” Path输出到下游组件;如果不能在参考表中找到相应的键值,那么该数据行匹配失败,从“Lookup No Match Output”Path 输出到下游组件。Lookup 转换在加载缓存数据时,会阻塞数据流。当缓存加载完成之后,数据流开始执行。

Merge Join 转换有两个有序的输入(使用Sort组件或在DB中使用Order by 子句排序)和一个输出,Merge Join转换使用联接条件,输出相应的数据,下游可以使用conditional split 转换,获取匹配成功或匹配失败的数据。Merge Join 不会缓存数据。

一,Lookup 转换

1,流的特性

Lookup 转换是非阻塞转换,具有流的特性,能够边加载数据,边对数据进行转换处理。当新的数据行进入转换组件时,已经被处理的数据行会被传递到下游组件,而不会被拦截。

当Lookup转换处于Full Cache缓存模式时,Lookup转换在将缓存表加载到内存中时,会阻塞数据流,直到所有的查找数据都加载到缓冲区后,才会开始执行Data Flow Task,因此,确保将小表作为缓存表,而将大表的数据流式传输到Lookup转换组件。

当Lookup转换处于Partial Cache或No Cache缓存模式时,Looup 转换被识别为 基于行的转换,流经转换的行,需要与一个外部输入进行交互,从而被逐一处理。鉴于基于行的处理过程,在大多数情况下无法跟上数据流处理的速度,缓冲区将被拦截,直到转换组件处理完缓冲区中的所有数据。

2,Cache Mode

Lookup 转换有三种Cache Mode:Full Cache,Partial Cache 和 No Cache.

Full Cache 是指Lookup 转换将缓存表中的数据全部加载到内存中的数据缓冲去中,另一个输入中的每一行数据都会流经缓冲区,执行联接操作。

No Cache 是指Lookup 转换对上游输入的每个数据行,都会执行一次查询,check数据是否存在。 在No Cache 模式下,当每个输入行流经Lookup 转换时,该组件向数据库中的参考表发送一条请求,查看键值是否匹配,这种方式性能非常低下,速度慢。

Partial Cache 是指Lookup转换在MaxMemoryUsage限制内将最近使用过的数据进行缓存,一旦缓存增长过大,最少使用的缓存数据将会被丢弃。如果参考表数据量太大,而无法将其所有数据全部加载到缓存中,可以选择No Cache。

当Package启动时,与No Cache模式一样,不会将数据预先加载到Lookup Cache中,当每个输入行进入组件时,该组件使用指定的联接键以及指定的查询来尝试查找匹配的记录。如果找到匹配项,那么及时将查找到的键值添加到缓存中,如果相同的键值再次进行查找,那么就可以从缓存中获取匹配键值,从而节省了访问外部输入源的查询时间。如果在缓存中没有找到匹配的键值,那么组件将访问外部输入源,进行查询,如果外部输入中也没有,那么键值不匹配。

MaxMemoryUsage属性指定Lookup 转换在Partial Cache模式下所使用的最大内存。

二,Merge Join 转换

1,Merge Join是半阻塞转换

在向下游组件传递数据之前,需要将数据拦截在缓冲区中一段时间,直到来自两个输入的键值匹配成功,Merge Join转换才会将数据行向下游组件传递。

2,Merge Join使用少量的内存

相比于Lookup 转换,Merge Join使用较少的内存,基本上不会缓存数据,因为只需要维护内存中用来联接两个输入所需要的少量数据。当内存受限或者数据过大时,Merge Join是一个非常有用的组件,前提是输入流是有序的。

三,Cache Connection Manager

Lookup 转换是唯一使用CCM 缓存数据的组件,CCM能够从任意数据源中填充Lookup 缓存。如果Lookup 转换处于Full Cache 模式下,那么使用CCM加载缓存将会提高转换性能。

在相同的Package中,如果多个Lookup 转换使用相同的参考数据集,那么这些Lookup转换可以共享相同的缓存,这样,就不需要多次加载相同的缓存数据。

 

数据的联接

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/5509837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!