informatica中lookup組件學習

LOOKUP控件的主要目的是:
從關係型的表、視圖或者同義詞中根據lookup 條件查詢lookupport,返回查詢結果,供mapping 中的其他控件使用或者插入到目標表
LOOKUP控件能夠完成的任務包括:
得到一個關聯的值,例如根據USER_ID 得到USER_NAME

執行一個計算,例如得到計算公式中的一個乘數
更新緩慢變化的維表,可以用LOOKUP 來判斷當前記錄是否在目標表中已經存在
LOOKUP控件的類型:
Connected:直接從其他控件獲得輸入信息;可以使用靜態或者動態的Cache;只緩衝mapping中用到的port;每條記錄可以返回多個column,並且能夠插入到動態Cache 中;查詢條件無匹配時,返回所有輸出port的默認值,如果使用動態Cache,Informatica Server把記錄毫無改變的保留在Cache中;支持用戶定義的默認值;返回多個輸出值到另一個控件中
Unconnected:間接的從其他控件的:LKP表達式的結果來獲得輸入信息;只能使用靜態Cache;緩衝所有的port;每條記錄只能返回一列;查詢條件無匹配時,返回NULL;不支持用戶定義的默認值;將返回值輸出到定義:LKP表達式的控件中
Connected LOOKUP控件的處理過程
1.直接從mapping 中的另一個控件獲得輸出數據
2.對於每一條數據,Informatica Server 根據LOOKUP控件中的條件去查詢LOOKUP表或者是Cache
3.如果LOOKUP 控件是Uncached 或者使用的是靜態的Cache,InformaticaServer返回查詢的結果;如果使用的是動態的Cache,Informatica Server 在Cache中查詢從LOOKUP表中查詢得到的結果,如果在Cache 中不存在,則將結果插入到Cache中,如果在Cache中存在,則更新這些記錄或者不做改變,同時標記這些記錄是“插入”、“更新”、“無變化”等類型
4.然後將結果返回到下一個控件
可以將上面的經過經過filter 或者router 控件來得到對於目標表中不存在的記錄
Unconnected LOOKUP控件的處理過程
1.相關控件想間接的從其他LOOKUP 控件的:LKP表達式的結果來獲得輸入信息,例如UPDATE STRATEGY 控件
2.對於每一條數據,Informatica Server 根據LOOKUP控件中的條件去查詢LOOKUP表或者是Cache
3.Informatica Server 返回一個值到LOOKUP 控件的return port
4.Informatica Server 返回值到調用:LKP 的控件的表達式中
Unconnected LOOKUP 控件的主要用處是更新緩慢變化的維
LOOKUP控件的組件
LOOKUP 表
需要有源或者是目標中的一個可以訪問這個LOOKUP 表;可以是一個單獨的表,也可以使用SQL語句覆蓋來得到一個包括多個表的查詢通過連接到數據來引入LOOKUP 表的定義,可以通過數據庫的本地驅動或者是ODBC來進行連接,但是使用數據庫本身的本地驅動性能更好一些對於非常大的LOOKUP表,考慮添加索引來提高查詢的性能,索引需要包括LOOKUP 條件中的所有的字段對於Cache LOOKUP,將LOOKUP的ORDER BY 子句中的包含在索引中即
可;對於Uncached LOOKUP,要把LOOKUP 條件裏面的自動都加入到索引中
LOOKUP端口
I:輸入端口
O:輸出端口
L:查詢端口,在默認的SQL 中出現,LOOKUP 表中的每列都被自動的定義
爲L 和O 端口,可刪除
R:無連接LOOKUP 中的返回端口
LOOKUP屬性
Lookup SQL Override 只能在cache enable的情況下才能用,另外不要輸入ORDER BY 子句,即使輸入INFORMATICA 也會產生ORDER BY 子句
Lookup CachingEnabled:如果選中,查詢一次表,以後的記錄都從緩衝中去查詢;如果不選,每條記錄都從數據庫中查詢一次
Lookup Policy on Multiple Match:確定在uncached 和static cache的情況下如何處理查詢得到的多條記錄,可以取得第一條、最後一條或者是報錯;在dynamic cached的情況下,如果查詢得到多條記錄,會報錯
Dynamic Lookup Cache:當把經過的記錄插入到目標表的同時,插入或者更新cache裏面的記錄
Insert Else Update:如果選中整個選項並且進入LOOKUP控件的記錄類型是INSERT,那麼對於不存在的記錄進行插入,對於存在的記錄進行更新;如果不選中這個選項,只是對那些是INSERT類型的記錄在cache 進行尋找,找不到則插入,否則不做其他操作

Update Else Insert:如果選中整個選項並且進入LOOKUP控件的記錄類型是UPDATE,那麼對於存在的記錄進行更新,對於不存在的記錄進行插入;如果不選中這個選項,只是對那些是UPDATE類型的記錄在cache 進行尋找,找到則更新,否則不做其他操作。
LOOKUP查詢
默認產生ORDER BY 子句,並且順序與SELECT 中的字段的順序是一致的SYBASE中的ORDER BY 子句最多可以有16 個字段,因此如果LOOKUP 中有超過16 個字段的查詢,必須使用多個LOOKUP控件進行查詢當在OVERRIDE SQL 中要寫WHERE子句時,如果是dynamic,必須在LOOKUP控件前面添加一個FILTER 控件,來確保只有滿足條件的記錄被插入到cache和目標表中如果沒有cache,sql override 無效;在override 中SELECT 的字段必須與L 端口和O端口一致
LOOKUP條件
類似於WHERE 子句;條件中的數據類型必須一致;多個條件之間的關係是“與(AND)”;NULL值是可以匹配的;
如果有多個條件,把帶等號的條件放在前面,可以提高性能;對於有多個匹配的情況,可以選擇返回的類型:第一個匹配、最後一個匹配、返回錯誤;INFORMATICA的ORDER BY 是升序排列的dynamica cache 的情況下,因爲不能返回多個記錄,所以只能使用等號的條件
LOOKUPtips
給LOOKUP 條件中的字段添加索引把帶有等號的條件放置在前面把較小的LOOKUP表進行cache在數據庫中進行表的關聯:如果LOOKUP表和源表在同一個數據裏面,而且cache是不可能的,就在數據庫裏面進行表關聯對於靜態的LOOKUP表,儘量使用永久性的cache:這樣可以在多個session 見覆用如果想在EXPRESSION 中使用:LKP來調用查詢的結果,引入一個unconnected 的LOOKUP
對於cache 的LOOKUP,重定義ORDER BY 子句:1)generate SQL;2)按照LOOKUP
條件中的字段的順序添加ORDER BY 語句;3)在ORDER BY 語句後面添加--,作爲重定

義的記號,否則出錯

文章源地址:http://blog.sina.com.cn/s/blog_62d12053010170ub.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章