组件元数据
可以通过右击一个组件,选择”显示高级编辑器”来查看组件的元数据。
不是所以的组件都可以显示高级编辑器,而且很多组件,即使在高级编辑器中,我们也无法任意修改预定的元数据。比如在组件中加入或删除输出。关于保护元数据,会在实现组件设计时方法中提到。
输入和输出是组件最基本的元数据,每个组件都可以若干个输出和输入,输入用来接收上游组件输出的数据,组件对数据处理完成后,输出将数据交给下游组件。源组件只有输出,目标组件只能有输入。
上游组件的输出和下游组件的输入通过路径来连接,图中绿色的有向线就是路径。可以在路径上添加数据查看器,查看执行时数据的传递过程。
另一重要的元数据是连接管理器,对源组件和目标组件来说,连接管理器时必须的。通过连接管理器实现与外部数据库的对话,读取或写入数据。
数据转换类型
数据从一个组件传递到另一个组件的方式有三种:
1.行转换 —— 指组件接收到一行数据,对此行数据处理后再输出。在组件的整个数据处理过程中不新建或删除数据行。例如一个组件会接收上游的100行数据,它每收到一行数据,处理完成后就将此行数据交给下游组件,不会等到所有的100行数据都处理完成后再交给下游组件。
2.半阻塞转换 —— 指组件会控制数据一段时间。例如组件接收100行数据,它要对每10行数据汇总一次,最后输出10行汇总的数据。不同于行转换,每收到一行数据后,它不会立刻处理输出,而是将数据暂时保存,等收到10行数据后再处理,处理输出一行数据。
3.全阻塞转换 —— 类似于半阻塞转换,但全阻塞会控制所有的数据。处理100行数据过程中,半阻塞分10次输出数据。而全阻塞只会在收到全部100行数据后才会处理输出。如排序组件,只有等收到所有的行后,才能确定排列顺序。
同步/异步输出
与数据转换类型对应的,组件的输出也分成同步和异步两种。
行转换组件的输出是同步的。打开一个派生列组件的高级编辑器,看输入的IdentificationString是:输入”派生列输入”(325)。
再看看输出的SynchronousInputID就是输入的IdentificationString。说明这个输出是与输入是同步的,每次输入收到一行数据后,输出便传递一行数据给下游组件。
半阻塞和全阻塞组件的输出都是异步输出,他们的SynchronousInputID是无值的。
Buffer
Buffer是用于装载数据的容器。源组件从外部数据获取数据后,数据就被装载到Buffer保存在内存中。一个数据流中可以有多个Buffer,Buffer不是由单个组件独有,而是由一簇组件共享,Buffer的数量由异步输出和Buffer容量决定。
数据流中每遇到一个异步输出,便创建一个新的Buffer。上图中有4个组件,源组件和排序组件有异步输出,于是有两个Buffer。Buffer1中含有源组件和派生列组件的列,假设源组件从外部数据源读取的数据有3列,而派生列组件又派生了2列,那么Buffer1中将定义5个列。排序组件接受完Buffer1的数据后,Buffer1的生命周期也就结束了,排序组件将创建Buffer2。
Buffer的容量是有限制的,可以设置数据流任务的DefaultBufferSize属性来指定Buffer的大小,最大不超过100MB。DefaultBufferMaxRows是建议的Buffer中最大行数,实际数据流执行过程中最大行数会根据MinBufferSize和MaxBufferSize调整。
如果组件需要的容量大小超出一个Buffer的最大容量,则会建立多个Buffer。
了解上述的概念基本后,就可以开发数据流组件了,想要进一步理解数据流执行计划,参见http://technet.microsoft.com/en-us/library/ms136012.aspx