Powercenter 基礎知識介紹 - 3

1              Transformation

1.1             Source Qualifier(數據源編輯,Relational

  1. Source Qualifier有下列用途:
    1. 連接同源的數據集;
    2. 過濾源數據;
    3. 指定連接條件(等連,非等連,like)和類型(內連,外連);
    4. 指定排序欄位(當Mapping中用到Aggregator或者Joiner時,排序可以改進性能);
    5. Distinct;
    6. Override Select;
  2. Source Qualifier執行從數據庫數據類型到Powercenter數據類型間的轉換;
  3. 當一個Mapping中有多個Source Qualifier連到多個Target時可用Target Load Order指定裝載順序;
  4. 在Source Qualifier中的多個地方可以使用參數或變量,傳入SQL語句用的是字符串格式,所以大部分時候都需要用引號;
  5. Source Qualifier只爲連出的Port產生SQL語句,需要注意的是,Override SQL是和連出線的Port順序相關的,而且,其它屬性如Join,Filter,Sorted Ports,Distinct會失效;
  6. 這些屬性都可以在Session 屬性中被Override(覆蓋)。
  7. 一切檢索的內容都是以SQL Query最高優先級,如果沒有sql query就找

   User Join Define和filter,如果有SQL Query那麼SQ拉出的端口必須與SQL Query的Select 個數一樣多, sql query多表時,select到的field的table的Source是一定需帶上的,當需要多個schema作爲源的話,則一定需要sql querry

  1. 一切檢索的內容都是以SQL Query最高優先級,如果沒有sql query就找

   User Join Define和filter,如果有SQL Query那麼SQ拉出的端口必須與SQL Query的Select 個數一樣多, sql query多表時,select到的field的table的Source是一定需帶上的,當需要多個schema作爲源的話,則一定需要sql querry

  1. Pre SQL和Post SQL在seesion執行前或者結束時會觸發。比如可以把session 執行的時間寫入到某些地方,獲取執行電腦的ip地址等用處.

 

1.2             Update Strategy

  1. Powercenter的更新策略包括兩個方面:
    1. 在Mapping中:用Update Strategy Transformation標識行爲Insert,Update,Delete或者Reject;
    2. 在Session中:配置Treat source row as 屬性(Insert,Update,Delete或者Data driven),配置Target的屬性(Insert,Update [as Update](只是更新) | [as Insert](把更新視爲新增) | [else Insert](先更新,更新不到則新增) ,Delete,Truncate target table option);
  2. 在Update Strategy Expression中可以輸入常量(DD_INSERT, DD_UPDATE, DD_DELETE, DD_REJECT)或者數字值 (0,1,2,3),其它數字值被解析爲0,可以用IIF或者DECODE函數構建邏輯表達式來區別每一行的更新策略;
  3. Forward Rejected Rows:勾選時被Rejected的行會存入對應Target配置的Reject文件中去,不選時,可能會寫入Session Log中去,根椐當前Transformation的Tracing Level的屬性來決定;如果在會話屬性中配置了出錯行日誌屬性,則不會生成Reject文件;

1.3             Expression

  1. 用來執行單行計算,在計算表達式中,可以使用輸入端口,輸入/輸出端口,可以使用函數以及非連接的Lookup,也可以使用變量端口;
  2. 數據來源只能一個

 

1.4             Lookup

  1. Lookup根椐輸入值從數據庫或者平面文件中查找數據;
  2. Lookup分爲連接型和非連接型的:
    1. 連接型的可以傳送多個返回值給其它的Transformation,非連接型的只能有一個返回端口,在表達式中用Lookup函數(:LKP())來調用;
    2. 連接型的可以利用到默認值,當沒有匹配記錄時,非連接型的總是返回空;
  3. Lookup可以配置成使用CACHE,對平面文件這項必選,Informatica Server在條件欄位上建立索引CACHE,在其它欄位上建立數據CACHE,如果分配的CACHE空間不夠就存放在CACHE文件中;
  4. CACHE文件可以是臨時的,也可以是固定化的;
  5. 當Lookup配置成動態時,對應的表是Target,如果輸入行連接欄位在CACHE中沒有找到匹配記錄,就在CACHE中插入一行,如果找到了就更新CACHE或者不更新CACHE,取決於比較欄位是否匹配,給標誌欄位NewLookupRow賦值0(Unchange),1(Insert),2(Update);
  6. Lookup的端口除了I,O之外,還有L和R;
  7. 多匹配行處理策略:返回第一行,返回最一行,報錯;
  8. 在數據庫Lookup使用CACHE的前提下可以使用Override SQL,下面情形下適於使用Override SQL:
    1. 增加一個Where子句;
    2. 指定不同於默認SQL的Order By子句,在帶有Order By子句的Override SQL後加上--,目的是屏蔽掉系統自動產生的Order By子句;

(PowerCenter 服務器是默認是按lookup的欄位來Order By的,如果你在Override裏面想要覆蓋它的Order By方式,一定必須在結尾輸入’--‘註釋符來覆蓋,否則lookup會失敗,而且在新的Order by 裏面要有LookUp Condition包含的欄位,而且順序需要一致)

    1. Lookup表名或者欄位中包含保留字或者欄位名中含/時,用引號將保留字引起來;

(如果look up欄位裏面包含了db的保留字,那麼需要在pm目錄下建立一個含有那些保留字的reswords.txt的文件,pm會在保留字周圍放置一些引用,來解決和服務器衝突的問題.)

    1. 需要在Lookup查詢中使用參數或者變量時;
    2. 其它情況,比如從一個連接中返回結果或者要對返回作函數處理後的結果作爲CACHE;
  1. 關於Lookup的條件匹配:
    1. 條件兩邊的端口必須匹配;
    2. 輸入端口允許在條件中出現多次;
    3. 多個條件間的關係是AND;
    4. 相等條件可以匹配空值(NULL=NULL);
    5. 如果條件中有等於和不等於,將所有等於放在前面;
  2. 如果允許,可以在Lookup表的連接條件欄位上建立索引,以改進性能;
  3. LookUp一定要有輸入port,SQL Overrid不能覆蓋condition的作用
  4. Dynamic LookUp一般用於查找目標表是否已經有Source傳過來的記錄,然後根據更新標誌(flag)做處理.也就是把目標表的所有數據先用文件作爲緩存存放起來,然後Source傳過來的記錄與緩存文件的數據比較並且由屬性(insert else update,update else insert)決定是否更新緩存文件.
  5. 理解Associated Port的意義;

關聯端口,當Dynamic Look Up Cache時,PM如何把in port的資料和cache裏面的資料來對比和關聯,然後產生新的cache和NewLookUpRow

就是需要用Associated Port來關聯in port端口的資料或者Sequrence了。Condition 相關的Fields端口會被自動關聯.只有有連線出去的port的比較纔有意義.也就是說如果沒有連線出去,兩個值儘管不相等,NewLookUpRow還是爲0.而且Null=Null

  1. Ignore in Comparison

可以不去比較的欄位(但是至少要有一個,要不Look Up會失敗),如果適當使用可以提高性能。

忽略比較,當這個值之外所有比較值都相同則不更新Cache,,NewLookUpRow=0

當其它比較值還有不相同時則更新Cache. NewLookUpRow=,1 or 2

  1. Output Old Value On Update:當更新的時候不會更新新值到Cache,全部以Cache裏面的值輸出,
  2. 更多LKP屬性可見

   

 

 

1.5             Aggregator

  1. Aggregator可用於聚合統計,和SQL語句不同的是,可以針對不同的計算指定不同的條件,並可輸出非Group By的欄位;
  2. 用於Group By的端口可以是輸入的, 輸入輸出的,輸出的或者變量端口,用到的輸出及變量端口中不能含有統計函數;
  3. 統計端口可以包含統計函數(共有15個),可以進行兩層嵌套,但要求所有的統計端口都進行嵌套;
  4. 對於那些即非Group By又非統計的端口,返回最後一次收到的那一行;
  5. Sorted Input屬性表示輸入的數據已經按Group By端口的要求排好了順,這樣能提高性能,輸入部分數據就能有部分結果,源和目標的組件能同時工作,在沒有選這個屬性的情況下,需要等到所有數據輸入完成才能開始有統計結果;注意:當選擇Sorted Input屬性,但是輸入數據未排序時。Session將failed。當aggregate expression包含嵌套aggregate functions或者採用incremental aggregation或者Treat source rows as是data driven時,不能用Sorted Input屬性。
  6. 在上面屬性未選的情況下,需要用到索引CACHE和數據CACHE

 

1.6              Filter

  1. Filter用來過濾數據,被過濾掉的數據不會寫入Session Log,也不會寫入Reject File;
  2. 將Filter儘可能地靠近Source可以提升性能;
  3. Filter只能接受來自單個Transformation的數據流;
  4. Filter只有一種輸入/輸出端口,默認值無效;
  5. 只有Filter Condition評估爲真(或者非零數值)的記錄才能通過;
  6. 如果有可能,用Source Qualifier代替Filter可以取得更好的性能。

 

1.7             Joiner

  1. Joiner可以用來連接兩個相關的不同來源的數據集;
  2. 至少需要指定一個匹配端口;
  3. 對兩個來源有如下限制:
    1. 兩個數據源要求是來自兩個Pipeline或者一個Pipeline的兩個分支;
    2. 任何一個Pipeline中都不能含有Update Stragegy;
    3. Sequence不能直接連到Joiner;
  4. Joiner的主要屬性如下:
    1. 比較時大小寫敏感;
    2. 緩存目錄,數據緩存的大小,索引緩存的大小;
    3. 連接類型(Normal,Master Outer,Detail Outer,Full Outer);
    4. 輸入已排序:輸入數據已按連接端口的順序排好序,這可以減少磁盤輸入及輸出,提高了Joiner的性能;
  5. 指定非重複值少的表作爲Master表可以提升性能,默認情況下,第一個加入的數據源是Detail;
  6. 只支持相等連接,當使用多個連接端口時,連接的順序對性能有影響;
  7. 連接端口如果含有NULL值,連接不會成功;
  8. Joiner一次只能連接兩個數據源,如果有多個數據源要進行連接,使用多個Joiner;
  9. Joiner可以連接來自同一個Source的數據流(自連),有兩個方法:如果Joiner選擇了Sorted Input屬性,可以用一個Source Instance來實現,否則就需要Source的兩個Instance;
  10.  Joiner的Index Cache(連接端口) 以及Data Cache(其它端口)是針對Master表建立的;
  11. 在不同的配置條件下,Joiner有不同的阻塞策略,這樣可以用更少的Cache,對性能有不同的影響;
  12. 在有可能的情況下,儘可能在數據庫完成連接處理;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章