Cheney Shue

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  77 随笔 :: 0 文章 :: 571 评论 :: 31 引用

公告

   微软将数据流技术称为管道(Pipeline)技术,数据流组件也可以叫做管道组件。可以形象地将数据看成水流在管道中流动,每个数据流组件接收上游组件交付的数据,将数据处理后再交付给下游的组件。

组件元数据

   可以通过右击一个组件,选择显示高级编辑器来查看组件的元数据。

 



   不是所以的组件都可以显示高级编辑器,而且很多组件,即使在高级编辑器中,我们也无法任意修改预定的元数据。比如在组件中加入或删除输出。关于保护元数据,会在实现组件设计时方法中提到。

   输入和输出是组件最基本的元数据,每个组件都可以若干个输出和输入,输入用来接收上游组件输出的数据,组件对数据处理完成后,输出将数据交给下游组件。源组件只有输出,目标组件只能有输入。

   上游组件的输出和下游组件的输入通过路径来连接,图中绿色的有向线就是路径。可以在路径上添加数据查看器,查看执行时数据的传递过程。

 



   另一重要的元数据是连接管理器,对源组件和目标组件来说,连接管理器时必须的。通过连接管理器实现与外部数据库的对话,读取或写入数据。

数据转换类型

   数据从一个组件传递到另一个组件的方式有三种:

      1.行转换 —— 指组件接收到一行数据,对此行数据处理后再输出。在组件的整个数据处理过程中不新建或删除数据行。例如一个组件会接收上游的100行数据,它每收到一行数据,处理完成后就将此行数据交给下游组件,不会等到所有的100行数据都处理完成后再交给下游组件。

      2.半阻塞转换 —— 指组件会控制数据一段时间。例如组件接收100行数据,它要对每10行数据汇总一次,最后输出10行汇总的数据。不同于行转换,每收到一行数据后,它不会立刻处理输出,而是将数据暂时保存,等收到10行数据后再处理,处理输出一行数据。

      3.全阻塞转换 —— 类似于半阻塞转换,但全阻塞会控制所有的数据。处理100行数据过程中,半阻塞分10次输出数据。而全阻塞只会在收到全部100行数据后才会处理输出。如排序组件,只有等收到所有的行后,才能确定排列顺序。

同步/异步输出

   与数据转换类型对应的,组件的输出也分成同步和异步两种。

   行转换组件的输出是同步的。打开一个派生列组件的高级编辑器,看输入的IdentificationString是:输入派生列输入”(325)



   
再看看输出的SynchronousInputID就是输入的IdentificationString。说明这个输出是与输入是同步的,每次输入收到一行数据后,输出便传递一行数据给下游组件。



   
半阻塞和全阻塞组件的输出都是异步输出,他们的SynchronousInputID是无值的。

Buffer

   Buffer是用于装载数据的容器。源组件从外部数据获取数据后,数据就被装载到Buffer保存在内存中。一个数据流中可以有多个BufferBuffer不是由单个组件独有,而是由一簇组件共享,Buffer的数量由异步输出和Buffer容量决定。

 



   数据流中每遇到一个异步输出,便创建一个新的Buffer。上图中有4个组件,源组件和排序组件有异步输出,于是有两个BufferBuffer1中含有源组件和派生列组件的列,假设源组件从外部数据源读取的数据有3列,而派生列组件又派生了2列,那么Buffer1中将定义5个列。排序组件接受完Buffer1的数据后,Buffer1的生命周期也就结束了,排序组件将创建Buffer2

   Buffer的容量是有限制的,可以设置数据流任务的DefaultBufferSize属性来指定Buffer的大小,最大不超过100MBDefaultBufferMaxRows是建议的Buffer中最大行数,实际数据流执行过程中最大行数会根据MinBufferSizeMaxBufferSize调整。



   如果组件需要的容量大小超出一个Buffer的最大容量,则会建立多个Buffer

 

了解上述的概念基本后,就可以开发数据流组件了,想要进一步理解数据流执行计划,参见http://technet.microsoft.com/en-us/library/ms136012.aspx

posted on 2007-06-03 15:04 Cheney Shue 阅读(...) 评论(...) 编辑 收藏