Informatica基礎系列(四)——聯結組件、路由組件

目錄:

Informatica基礎系列(零)——前言

Informatica基礎系列(一)——Helloworld

Informatica基礎系列(二)——更新策略轉換組件

Informatica基礎系列(三)——表達式、篩選、查找組件

Informatica基礎系列(四)——聯結組件、路由組件

Informatica基礎系列(五)——參數與變量

Informatica基礎系列(六)——發佈環境、遷移知識庫

Informatica基礎系列(七)——常見問題、注意事項

Informatica基礎系列(外)——不支持 MySQL Community 版本的解決方案

正文:

今天繼續分享 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,微信掃一掃即可關注: