1.1 Normalizer
- 在關係型數據庫處理中,Normalizer用來從一行變成多行;如:f1 f2 f3一行三個字段處理後可變成f1 f2,f1 f3兩行兩字段,如下圖
- Generated Key,自動產生不能刪除的端口,命名爲GK_XXX,由這個端口產生一個序列號值,在需要時可以作爲主鍵,運行成功後會在知識庫中保存下一個值,可以在Mapping中看到下一個值,可以修改這個值;
- Generated Column ID,自動產生不能刪除的端口,命名爲GCID_<occuring_field_name>,這個端口產生一個序號指名當前輸出來自多個輸入中的哪一個;
- Reset和Restart屬性:會話結束時重置GK值到上次的值或者到1;
1.2 Router
- Router和Filter很相似,Router可以用一或多個Filter來取代,不同的是用Router來生成多個組時輸入數據只需處理一次,所以效率更高;
- Router 由一個輸入組,一到多個用戶定義的輸出組和一個默認組組成,每一個用戶定義的輸出組含一個測試條件,滿足條件的輸入數據會進入相應的用戶定義組,不滿足所有用戶定義條件的數據會進入默認組;
- 輸入組和輸出組的端口類型和名稱相同;
- Powercenter根椐連接的用戶定義輸出組的順序來進行評估,如果默認組沒有連接,則不評估那些沒有連接的用戶定義輸出組;
- 如果某一行符合多個輸出組的評估條件,則出現在多個組的輸出數據流中;
- 可以將一個輸出組的端口連到多個Transformation或者Target上,但不能將多個輸出組的端口連到一個Transformation或者Target上;
1.3 Sequence
- Sequence用來產生序列號用以作爲主鍵欄位,可以重用;
- 只有兩個輸出端口:Nextval和Currval;
- 通過配置Start Value,End Value,Current Value 和 Cycle屬性,可以讓產生的Nextval在一個指定的範圍內循環;
- 可以將Nextval端口連到多個Target上,這時是阻塞式的產生序列號的,可以保證多個Target得到不同的序列號,如果想要得到相同的序列號,可以將Nextval端口連到Target之前的一個共有的Transformation上;
- 如果只連出Currval,得到的是一個常量,並且一次阻塞只能獲得一個值,所以爲性能考量,一般都不連出這個端口,如果Nextval同時有連出,這時Currval = Nextval + Increment By;
- 在沒有配置Cycle屬性時,如果序列號達到了End Value,會話會失敗;
- 不重用的Sequence有Reset屬性,啓用以後,在每個會話結束時會將Current Value置爲會話開始時的值,這個值是它產生的第一個值;
- 當Sequence配置成重用時,應該給Number of Cached Values 一個大於零的緩存值,這個值是主要爲保證不出現重複數據而設置的.比如當設置爲100,那麼一個線程在從1開始在跑,則另外一個線程會從101開始.每次跑完都要補足100整數.
1.4 Sorter
- Sorter用來排序數據,可以指定多個排序端口,每個端口可以指定升降序,字符串比較時可以忽略大小寫,還可以用Distinct選項來消除重複(所有端口,包括沒有指定排序的端口);
- 排序時會用到輸入數據兩倍大小或者更大的空間,默認的排序Cache是8M,可選的排序Cache範圍是1M到4G,排序Cache不夠時,服務器會將數據臨時存儲在排序目錄,如果指定的排序Cache無法滿足,會話會失敗,可以用文檔中提到公式計算Cache;
- 當配置使用 Distinct屬性時,所有的端口都會用於排序;
- 默認情況下,NULL大於任何值,可以配置NULL值小於任何值;
1.5 Union
- Union可以將多個數據流合併成一個數據流,功能類似於SQL中的UNION ALL;
- Union可以有多個輸入組,只有一個輸出組,輸入組和輸出組有一一對應的端口;
- Ports 頁不可編輯,只能編輯Groups 和 Group Tabs頁;
1.6 Rank
- Rank可以用來返回根椐某個端口排序的最大或者最小的N條記錄,並且可以指定分組;可以用於得到去除的重複資料(比如5條相同數據,只取了一條,那麼另外四條可以由這個加上Sqerence組合得到其它四條.).
- Rank中可以使用分組,但並不能使用分組函數,可以指定多個分組端口,但用於排序的Rank端口不可用於分組;
- Rank端口有五種屬性:I(輸入),O(輸出),V(變量),R(排序),G(分組),至少需要有一個輸入端口和一個輸出端口,排序端口有且只有一個,而且必須輸出,排序端口和變量端口不能用於分組;
- 輸入端口的數據只能來自一個Transformation;
- 有一個默認的Rankindex端口,表示輸出行在排序中的位置;
- 如果是字符排序,可以選擇大小敏感或者大小寫不敏感;
- Top X 中的X數量表示前幾條數據(Rankindex的值就是順序),當Rankindex一樣時,取其中部分,比如Top1,有兩條記錄的Rankindex爲1,則取其中一條.其受cache限制,可按需調整cache.
1.7 Procedure
- 存取過程一般用於處理較爲複雜的數據,分爲連接型與非連接型,連接型一般用於取得返回值,非連接型一般用於在session執行前後執行一些動作,比如檢查數據庫空間之類的,但是可以完成所有連接型的功能,可用於Output Port作爲expression.
- 如果是隻有單個返回參數(out parameter)則使用方法類似:sp.sp_xxx(inID,proc_result),proc_result爲PM保留變量.如果有多個返回參數則需要定義本地變量來接收,比如sp.sp_xxx(inID,$$var1,proc_result),參數位置與類型必須與sp裏面定義的一致.
- 同個Procedure不得同時作爲連接型與非連接型.
- 可以使用多層嵌套存取過程.
1.8 Transaction Control
1.功能:用於控制事務的Commit, Rollback, Continues.,比如一年的銷售情況,可以按照月份分類,每個月作爲一個Transaction來控制,這樣就可以對單個月進行排序或者提交什麼的.
2.簡介:
在Properties Tab頁,主要屬性爲Transacion Control Condition, 在裏面寫控制事務的表達式,表達式的返回的值只能是以下值.
TC_CONTINUE_TRANSACTION |
No transaction changes will be performed for this row. This is the default TC expression. |
TC_COMMIT_BEFORE |
Commit and Begin a new transaction before this row written to the target. |
TC_COMMIT_AFTER |
Write this row to the target and COMMIT the transaction and begin a new transaction. |
TC_ROLLBACK_BEFORE |
Rollback the current transaction. Begin a new transaction and write row to target. |
TC_ROLLBACK_AFTER |
write the row to the target and rollback the transaction. Begin a new transaction. |
注意:當表達式的返回的值爲TC_ROLLBACK_BEFORE或 TC_ROLLBACK_AFTER時需要設置session的Treat source rows as Data driven,要不WorkFlow會爲failed.