Look up:

Look up组件做的事情和SQL SERVER中的inner和outer hash join差不多。

但是look up每次只能有两张表参与。

在FULL-CACHE模式下,两个source的其中一个会被完整地load进内存,然后另一个source每次load一部分数据进到缓冲区再做匹配。

Look up可以有三个输出:1)matched rows;2)unmatched rows;3)error rows;

Cache Connection Manager (CCM)可以把Look up的cache存起來

在使用Look up的时候,因为Look up在cache其中一张表的时候是会block整个flow的执行的,也就是说整个执行的过程需要等待这张表的数据都被加载到内存里面才会继续往下走,这种情况下,当出现一张dim表和一张fact做look up的时候,或者说一张小表和一张大表做look up的时候,确保小表被cache。

Look up本身是没有多线程跑的:

There is no opportunity for the Lookup Transformation to implicitly perform in an SMP (or
scale-out) manner. The same applies to the Merge Join Transformation — on suitable hardware
it will run on a separate thread to other components, but it will not utilize multiple threads
within itself. --《Professional SQL Server Integration Services 2012》

其实Merge Join和Look up各有各的优劣。Merge Join虽然不要求某张表的数据都加载到内存,但是数据要事先排序,这个耗了CPU而且数据排序的过程也是要在内存中进行的。而look up的hash其实也是一个计算过程,而且重要的是这个hash join的运算必须要求整张表的数据都进到内存里面,这样会占用很大内存空间。根本没有说那个好那个坏。Merge Join寄希望于sort栏位有索引而节省CPU开销,而look up寄希望于cache的那张表不要太大,不然内存压力很大。就跟SQL Server的hash join和merger join一个道理,一般在没有索引的情况下,大表间的join都是hash优于merge,sort的开销太大了。

------------------------------------------------------------------------------------------------------------------------------------------

Merge Join:

Merge Join做的事情差不多和sql server的inner join、outer join一样,但是它不会和look up预先加载数据到内存,也不会有cache mode,它要求输入的两个源需要事先排序。你需要把源的IsSorted选项设置为True以及两个源的SortKeyPosition配置成和你要Join的key的位置一致,而且源数据的排序也必须要一致,不然数据不可能对上的,这个Merge Join就可以跑了。它不会有look up那样提供了三个输出,如果要实现look up那种unmatched的数据分流,就需要在merge后面加一个Conditional Split组件来实现。

Merge Join要比Look up节省更多的内存使用,因为Look up在Full-Cache模式下需要把其中一个输入的数据都加载到内存里面。但是Merge join两个输入源在Merge Join开始连接匹配之前要求双方把数据都准备好,这样一个缺点就是,如果A输入只有5行数据,B输入有1000000行数据,即便A输入的所有数据在B输入的前5行中已经找到了匹配,这种情况下B输入剩下的所有数据行还是需要再被继续加载。

这里有篇博文专门讲Look up:http://www.cnblogs.com/biwork/p/4245978.html

还有一篇讲了Merge Join:http://www.cnblogs.com/biwork/p/3308846.html

Data Flow ->> Look up & Merge Join的更多相关文章

  1. SSIS Data Flow 的 Execution Tree 和 Data Pipeline

    一,Execution Tree 执行树是数据流组件(转换和适配器)基于同步关系所建立的逻辑分组,每一个分组都是一个执行树的开始和结束,也可以将执行树理解为一个缓冲区的开始和结束,即缓冲区的整个生命周 ...

  2. SSIS ->> Control Flow And Data Flow

    In the Control Flow, the task is the smallest unit of work, and a task requires completion (success, ...

  3. 微软BI 之SSIS 系列 - Merge, Merge Join, Union All 合并组件的使用以及Sort 排序组件同步异步的问题

    开篇介绍 SSIS Data Flow 中有几个组件可以实现不同数据源的数据合并功能,比如 Merger, Merge Join 和 Union All.它们的功能比较类似,同时也比较容易混淆,下面是 ...

  4. 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念

    开篇介绍 在 SSIS Dataflow 数据流中的组件可以分为 Synchronous 同步和 Asynchronous 异步这两种类型. 同步与异步 Synchronous and Asynchr ...

  5. [转]Data Flow How-to Topics (SSIS)

    本文转自:http://technet.microsoft.com/en-us/library/ms137612(v=sql.90).aspx This section contains proced ...

  6. Union All ,Merge,Merge join 区别

    本文转自:http://www.cnblogs.com/gudujianxiao/archive/2012/07/17/2594709.html SSIS Data Flow 中有几个组件可以实现不同 ...

  7. Sort merge join、Nested loops、Hash join(三种连接类型)

    目前为止,典型的连接类型有3种: Sort merge join(SMJ排序-合并连接):首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序:然后生产probed ...

  8. Data Flow ->> Union All

    Wrox的<Professional Microsoft SQL Server 2012 Integration Services>一书中再讲Merge的时候有这样一段解释: This t ...

  9. Data Flow ->> Script Component

    和Control Flow中的Script Task非常类似,不同的是Script Component是Per-Row的执行类型.打个比方,在Script Component中加入两个Output的字 ...

随机推荐

  1. C#基础——三元表达式

    采用三元操作符对?:对表达式进行运算,这种操作符比较特别,因为它有三个操作对象,但它确实属于操作符的一种,它最终也会生成一个值.其表达式采取下述形式: boolean-exp ? value0 : v ...

  2. Window.document对象(1)

    1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:     var a =docunme ...

  3. WPS for ubuntu14

    QGtkStyle could not resolve GTK. Make sure you have installed the proper libraries. sudo apt-get ins ...

  4. 【BZOJ】【1030】【JSOI2007】文本生成器

    AC自动机/DP Orz ZYF 玛雅快要省选了,赶紧复(xue)习(xi)一下AC自动机…… 其实在AC自动机上DP并没有当初想的那么复杂……就是把DP的转移关系换成了AC自动机上的边而已(不过这题 ...

  5. SpringMVC:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax;

    今天用SpringMVC做修改添加操作,之前的操作都实现了添加修改,但始终报com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have ...

  6. Leetcode#105 Construct Binary Tree from Preorder and Inorder Traversal

    原题地址 基本二叉树操作. O[       ][              ] [       ]O[              ] 代码: TreeNode *restore(vector< ...

  7. Leetcode#145 Binary Tree Postorder Traversal

    原题地址 递归写法谁都会,看看非递归写法. 对于二叉树的前序和中序遍历的非递归写法都很简单,只需要一个最普通的栈即可实现,唯独后续遍历有点麻烦,如果不借助额外变量没法记住究竟遍历了几个儿子.所以,最直 ...

  8. nodeJs入门篇之认识nodejs

    摘要:将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开 ...

  9. jQuery新的事件绑定机制on()

    浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理 ...

  10. Android 添加Button事件

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...