Informatica 静态组件和动态组件

所谓的Passive组件,也就是静态组件,它的特点是:
来一行数据,我处理一下,然后输出一行数据。
可以看右图简单的示意图

如果是Active组件,那么输入的数据和最终输出的数据是不一定对等的。
我自己的感觉中,Active组件更像是系统中的临时表。我们的数据经过了Active组件的时候,会被全部先加载到临时表中,等数据加载完以后,再做一些临时表相关的操作。比如:分组,关联查询,排序,过滤(Filter)等等操作。

就一个最简单的例子 :
    当Informatica workflow启动的时候,观察Monitor可以发现,Source Qualifier 会先把所有的Source文件加载的缓存中,才会开始接下来的ETL过程。(当然可能因为缓存大小的设置不同,只先把一部分加载到缓存中就开始其余的ETL操作,待确认)
    二Source Qualifier就是一个非常典型的Active组件

开发中静态和动态组件使用的过程中是经常会遇到坑的,总结下来,其实有以下几种:
1:静态组件可以随意连接到动态组件上 一静对一动
2:多个静态组件可以随意的连到一个动态组件上 多静对一动
3:一个动态组件可以连接到静态组件上 一动对一静
4:多个动态组件没法连到一个静态组件上 多动无法对一静
5:一个静态组件一个动态组件没法同时连接到一个静态组件中 一静一动无法对一静
6:已经静态组件和一个动态组件可以连接到同一个动态组件中 一静一动对一动

我大概想了一下,静态组件对于数据的变动是行级别的,就是处理一行数据,就返回一行数据。
但是动态组件对于数据处理却不是行级别的,很多都是遍历完所有的数据,并且多所有的数据进行处理后,返回一个统一的结果。

打个比方:静态组件的入参是一行数据,返回值是一行结果。
        动态组件的入参是所有的数据一起,返回的结果也是所有的数据一起。比如:Joinner其实是把两边的所有的数据都加载到缓存中,然后一起进行计算,得出最后的一个结果。因为Join操作是依赖于所有的数据才可以得到结果的。
        而如果是一个Expression 组件的话,它接受了每一行数据,然后通过表达式计算,并且返回一个结果就可以了。不依赖于整体数据。

最后我们可以得出一个答案,为什么多个动态组件没法连接到一个静态组件上,因为:
    当同一个源A,连到两个静态组件B1,B2上面,然后这两个静态组件B1,B2最后又一起连接到一个静态组件C上面的时候,我们可以保证的是:每一次从组件B1,B2上面流过来的数据,都是源A当中的同一行。但是,如果同一个源D,连接到两个动态组件E1,E2中,经过这两个动态组件处理后,在把这E1,E2同时连到静态组件F上的话,我们是没法保证每一次执行,输送到F上面的数据来自于源D中的同一行。所以,两个动态组件没法连接到一个静态组件上。甚至,这E1和E2都没法保证有相同的行数,这个时候静态组件根本没法处理。这不合Informatica的设计理念。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值