1 Transformation
1.1 Source Qualifier(數據源編輯,Relational)
- Source Qualifier有下列用途:
- 連接同源的數據集;
- 過濾源數據;
- 指定連接條件(等連,非等連,like)和類型(內連,外連);
- 指定排序欄位(當Mapping中用到Aggregator或者Joiner時,排序可以改進性能);
- Distinct;
- Override Select;
- Source Qualifier執行從數據庫數據類型到Powercenter數據類型間的轉換;
- 當一個Mapping中有多個Source Qualifier連到多個Target時可用Target Load Order指定裝載順序;
- 在Source Qualifier中的多個地方可以使用參數或變量,傳入SQL語句用的是字符串格式,所以大部分時候都需要用引號;
- Source Qualifier只爲連出的Port產生SQL語句,需要注意的是,Override SQL是和連出線的Port順序相關的,而且,其它屬性如Join,Filter,Sorted Ports,Distinct會失效;
- 這些屬性都可以在Session 屬性中被Override(覆蓋)。
- 一切檢索的內容都是以SQL Query最高優先級,如果沒有sql query就找
User Join Define和filter,如果有SQL Query那麼SQ拉出的端口必須與SQL Query的Select 個數一樣多, sql query多表時,select到的field的table的Source是一定需帶上的,當需要多個schema作爲源的話,則一定需要sql querry
- 一切檢索的內容都是以SQL Query最高優先級,如果沒有sql query就找
User Join Define和filter,如果有SQL Query那麼SQ拉出的端口必須與SQL Query的Select 個數一樣多, sql query多表時,select到的field的table的Source是一定需帶上的,當需要多個schema作爲源的話,則一定需要sql querry
- Pre SQL和Post SQL在seesion執行前或者結束時會觸發。比如可以把session 執行的時間寫入到某些地方,獲取執行電腦的ip地址等用處.
1.2 Update Strategy
- Powercenter的更新策略包括兩個方面:
- 在Mapping中:用Update Strategy Transformation標識行爲Insert,Update,Delete或者Reject;
- 在Session中:配置Treat source row as 屬性(Insert,Update,Delete或者Data driven),配置Target的屬性(Insert,Update [as Update](只是更新) | [as Insert](把更新視爲新增) | [else Insert](先更新,更新不到則新增) ,Delete,Truncate target table option);
- 在Update Strategy Expression中可以輸入常量(DD_INSERT, DD_UPDATE, DD_DELETE, DD_REJECT)或者數字值 (0,1,2,3),其它數字值被解析爲0,可以用IIF或者DECODE函數構建邏輯表達式來區別每一行的更新策略;
- Forward Rejected Rows:勾選時被Rejected的行會存入對應Target配置的Reject文件中去,不選時,可能會寫入Session Log中去,根椐當前Transformation的Tracing Level的屬性來決定;如果在會話屬性中配置了出錯行日誌屬性,則不會生成Reject文件;
1.3 Expression
- 用來執行單行計算,在計算表達式中,可以使用輸入端口,輸入/輸出端口,可以使用函數以及非連接的Lookup,也可以使用變量端口;
- 數據來源只能一個
1.4 Lookup
- Lookup根椐輸入值從數據庫或者平面文件中查找數據;
- Lookup分爲連接型和非連接型的:
- 連接型的可以傳送多個返回值給其它的Transformation,非連接型的只能有一個返回端口,在表達式中用Lookup函數(:LKP())來調用;
- 連接型的可以利用到默認值,當沒有匹配記錄時,非連接型的總是返回空;
- Lookup可以配置成使用CACHE,對平面文件這項必選,Informatica Server在條件欄位上建立索引CACHE,在其它欄位上建立數據CACHE,如果分配的CACHE空間不夠就存放在CACHE文件中;
- CACHE文件可以是臨時的,也可以是固定化的;
- 當Lookup配置成動態時,對應的表是Target,如果輸入行連接欄位在CACHE中沒有找到匹配記錄,就在CACHE中插入一行,如果找到了就更新CACHE或者不更新CACHE,取決於比較欄位是否匹配,給標誌欄位NewLookupRow賦值0(Unchange),1(Insert),2(Update);
- Lookup的端口除了I,O之外,還有L和R;
- 多匹配行處理策略:返回第一行,返回最一行,報錯;
- 在數據庫Lookup使用CACHE的前提下可以使用Override SQL,下面情形下適於使用Override SQL:
- 增加一個Where子句;
- 指定不同於默認SQL的Order By子句,在帶有Order By子句的Override SQL後加上--,目的是屏蔽掉系統自動產生的Order By子句;
(PowerCenter 服務器是默認是按lookup的欄位來Order By的,如果你在Override裏面想要覆蓋它的Order By方式,一定必須在結尾輸入’--‘註釋符來覆蓋,否則lookup會失敗,而且在新的Order by 裏面要有LookUp Condition包含的欄位,而且順序需要一致)
- Lookup表名或者欄位中包含保留字或者欄位名中含/時,用引號將保留字引起來;
(如果look up欄位裏面包含了db的保留字,那麼需要在pm目錄下建立一個含有那些保留字的reswords.txt的文件,pm會在保留字周圍放置一些引用,來解決和服務器衝突的問題.)
- 需要在Lookup查詢中使用參數或者變量時;
- 其它情況,比如從一個連接中返回結果或者要對返回作函數處理後的結果作爲CACHE;
- 關於Lookup的條件匹配:
- 條件兩邊的端口必須匹配;
- 輸入端口允許在條件中出現多次;
- 多個條件間的關係是AND;
- 相等條件可以匹配空值(NULL=NULL);
- 如果條件中有等於和不等於,將所有等於放在前面;
- 如果允許,可以在Lookup表的連接條件欄位上建立索引,以改進性能;
- LookUp一定要有輸入port,SQL Overrid不能覆蓋condition的作用
- Dynamic LookUp一般用於查找目標表是否已經有Source傳過來的記錄,然後根據更新標誌(flag)做處理.也就是把目標表的所有數據先用文件作爲緩存存放起來,然後Source傳過來的記錄與緩存文件的數據比較並且由屬性(insert else update,update else insert)決定是否更新緩存文件.
- 理解Associated Port的意義;
關聯端口,當Dynamic Look Up Cache時,PM如何把in port的資料和cache裏面的資料來對比和關聯,然後產生新的cache和NewLookUpRow
就是需要用Associated Port來關聯in port端口的資料或者Sequrence了。Condition 相關的Fields端口會被自動關聯.只有有連線出去的port的比較纔有意義.也就是說如果沒有連線出去,兩個值儘管不相等,NewLookUpRow還是爲0.而且Null=Null
- Ignore in Comparison
可以不去比較的欄位(但是至少要有一個,要不Look Up會失敗),如果適當使用可以提高性能。
忽略比較,當這個值之外所有比較值都相同則不更新Cache,,NewLookUpRow=0
當其它比較值還有不相同時則更新Cache. NewLookUpRow=,1 or 2
- Output Old Value On Update:當更新的時候不會更新新值到Cache,全部以Cache裏面的值輸出,
- 更多LKP屬性可見
1.5 Aggregator
- Aggregator可用於聚合統計,和SQL語句不同的是,可以針對不同的計算指定不同的條件,並可輸出非Group By的欄位;
- 用於Group By的端口可以是輸入的, 輸入輸出的,輸出的或者變量端口,用到的輸出及變量端口中不能含有統計函數;
- 統計端口可以包含統計函數(共有15個),可以進行兩層嵌套,但要求所有的統計端口都進行嵌套;
- 對於那些即非Group By又非統計的端口,返回最後一次收到的那一行;
- Sorted Input屬性表示輸入的數據已經按Group By端口的要求排好了順,這樣能提高性能,輸入部分數據就能有部分結果,源和目標的組件能同時工作,在沒有選這個屬性的情況下,需要等到所有數據輸入完成才能開始有統計結果;注意:當選擇Sorted Input屬性,但是輸入數據未排序時。Session將failed。當aggregate expression包含嵌套aggregate functions或者採用incremental aggregation或者Treat source rows as是data driven時,不能用Sorted Input屬性。
- 在上面屬性未選的情況下,需要用到索引CACHE和數據CACHE
1.6 Filter
- Filter用來過濾數據,被過濾掉的數據不會寫入Session Log,也不會寫入Reject File;
- 將Filter儘可能地靠近Source可以提升性能;
- Filter只能接受來自單個Transformation的數據流;
- Filter只有一種輸入/輸出端口,默認值無效;
- 只有Filter Condition評估爲真(或者非零數值)的記錄才能通過;
- 如果有可能,用Source Qualifier代替Filter可以取得更好的性能。
1.7 Joiner
- Joiner可以用來連接兩個相關的不同來源的數據集;
- 至少需要指定一個匹配端口;
- 對兩個來源有如下限制:
- 兩個數據源要求是來自兩個Pipeline或者一個Pipeline的兩個分支;
- 任何一個Pipeline中都不能含有Update Stragegy;
- Sequence不能直接連到Joiner;
- Joiner的主要屬性如下:
- 比較時大小寫敏感;
- 緩存目錄,數據緩存的大小,索引緩存的大小;
- 連接類型(Normal,Master Outer,Detail Outer,Full Outer);
- 輸入已排序:輸入數據已按連接端口的順序排好序,這可以減少磁盤輸入及輸出,提高了Joiner的性能;
- 指定非重複值少的表作爲Master表可以提升性能,默認情況下,第一個加入的數據源是Detail;
- 只支持相等連接,當使用多個連接端口時,連接的順序對性能有影響;
- 連接端口如果含有NULL值,連接不會成功;
- Joiner一次只能連接兩個數據源,如果有多個數據源要進行連接,使用多個Joiner;
- Joiner可以連接來自同一個Source的數據流(自連),有兩個方法:如果Joiner選擇了Sorted Input屬性,可以用一個Source Instance來實現,否則就需要Source的兩個Instance;
- Joiner的Index Cache(連接端口) 以及Data Cache(其它端口)是針對Master表建立的;
- 在不同的配置條件下,Joiner有不同的阻塞策略,這樣可以用更少的Cache,對性能有不同的影響;
- 在有可能的情況下,儘可能在數據庫完成連接處理;