目录:
Informatica基础系列(一)——Helloworld
Informatica基础系列(三)——表达式、筛选、查找组件
正文:
今天继续分享 Infa,这次介绍两个组件的用法:联结组件(Joiner Transformation,以下简称 JT)、路由组件(Router Transformation,以下简称 RT)。
1. 概念介绍
第一,联结组件的作用是联结多表,跟数据库的 Join 一样。第二,路由组件是按条件对数据分组,load 到多个 target。我们还是做一个 demo 来认识这两个组件。
2. demo 描述
先看下 source 数据,如下图所示:
我们的需求是把 User_Source 和 Orders 做一个内联结,将对应字段 load 到 OrderDetail 和 OrderDetail_Oct10_Before,其中 OrderTime > '2017-10-10' 的记录进 OrderDetail,其他记录进 OrderDetail_Oct10_Before。
3. 开发步骤
首先是把两个 source 都拖到工作区,然后拖一个 JT 进来,将 source 里我们需要的字段以及联结的字段连到 JT 进来,如下图所示:
双击 JT,设置联结条件如下:
再拖一个 RT 进来,并将 JT 的字段拖到 RT 进来,并设置 RT 的分组条件,如下图所示:
可以看到 RT 的视图已经变成两组数据了,其实还有一组默认的,如果两组条件都不满足,则分到默认分组,如下图所示:
接下来就把需要的数据连到指定的 target 就好了,如下图所示:
其实我这里连错了,因为我们把联结字段的 UserMobile 和 Mobile 都连到 RT 中了,导致疏忽了字段的对应关系,其实只需要连一个进来就可以了。修改后如下所示:
设置一下 workflow ,我们就直接用插入就可以,如下图所示:
4. 验证结果
运行一下,看下结果,正如我们希望的那样,数据都进来了,我把 source 和 target 都贴出来,如下图所示:
5. 联结多表的另一种用法
其实,Infa 有一种更好的联结方式,我称它为 SQ 方式,就是将多个表连到同一个 SQ 上,通过直接写 sql 脚本的方式来完成。它比用上面的联结组件性能要高,尤其数据量比较大的时候,优势就很明显了。SQ 是拿着你写好的 sql 去 Server 上跑完后直接取到结果,而 JT 需要先把多个表记录缓存起来,再联结,得到结果。
下面简单介绍下 SQ 用法,首先 copy 一个 mapping,选中我们刚才做的 mapping,"ctrl+c/v" 就可以了。我们删除多余的部分,如下图所示:
然后把 source 拖进来,保留一个 SQ,把两个 source 字段拖到 SQ,将我们需要的字段连到 RT,如下图所示:
双击 SQ,点击 "Generate SQL" 自动生成 sql,就完成了。要注意的是要先把字段连过去,再生成 sql。生成的 sql,我们可以修改,添加 where 条件以及连接其他的表,只要保证 "SELECT" 到 "FROM" 部分的内容不变就可以了。
目前为止,Mapping 的基础组件就介绍完了,其他的组件不再详细介绍。后面会介绍其他的内容,比如使用参数、环境迁移、知识库迁移,再抽出一篇专门介绍其他零碎知识点汇总。Infa 的内容远不至此,更多内容不在此基础系列范围内,比如 Infa 监控报警机制等。另外,Infa 比较权威的社区 是 KB,上面可以搜索关于 Infa 的问题以及解决方案。
欢迎关注我的微信公众号:惜福 / xifu_forever,微信扫一扫即可关注:
网友评论