开篇介绍
MultiCast 多播转换可以将一个输入转换成一个或者多个向下的输出,但是它没有错误输出。简单总结,即一个输入多个输出无错误输出。
它主要用在的场景就是需要将一个输入流中的数据创建成不同的逻辑数据副本,对不同的多个目标表文件的时候,不同的文件或者目标表可以选择数据源中的不同列输出。比如有一个 Excel 数据源表,需要将 Excel 数据源中的 A,B,C 三列的数据输出到 STAGING A 表中;同时,需要将此数据源中的 A, E, F 列同时输出到另外一个文本文件中。如果按照以前的做法,可能会使用到两个 Data Flow Task 数据流任务,然后分别配置成 Excel -> 表 STAGING A , Excel -> .txt 文件。那么如果了解 MultiCast 控件的用法,就可以不需要这么处理了。
案例演示
这个案例使用一个平面文件作为数据源。
需求就是将这个平面文件输出到两个不同的目标表 -
一个是 T30_STAGING_INTERNET_SALES,这张表只有 6 列。
另一个就是将这个平面文件中 SalesAmount > 1000 的输出到另外一个表、或者文件,这里的示例使用一张表 T030_STAGING_1000_SALESAMOUNT。表的结构和文件内容是一致的,这样演示起来要方便一些。
在完成平面数据源的配置之后,直接拖放一个 MultiCast 多播控件即可,可以注意到上图中,它是有一个输入和多个输出的。
在左侧的 OLD_DST_STAGING_INTERNET_SALES 源和目标关系配置中,由于目标只需要几列,因此配置中只匹配需要的列即可。
右侧 Conditional Split 控件中,只处理 SalesAmount > 1000 的数据,目标表只和 1000_SALESAMOUNT 输出源关联。
最后的输出可以看到两个目标最终接受数据的结果。
MultiCast 和 Conditional Split 的区别
在形状上,两者感觉差不多, 并且相同的地方都是有一个输入,一个或者多个输出。
但是不同的是:
- MultiCast 可以将每一行定向到每一个输出,即往下输出的内容是一致的,副本数据的拷贝 ; Conditional Split 则是将一行只定位到一个输出,按条件走。
- MultiCast 无法写表达式,也无法和系统变量,用户自定义变量交互;Conditional Split 则可以使用表达式访问变量,列,函数等。
- MultiCast 不支持错误输出处理;Conditional Split 支持错误输出处理。