infa

一、Informatica介紹
Informatica PowerCenter 是Informatica公司開發的世界級的企業數據集成平臺,也是業界領先的ETL工具。
Informatica PowerCenter使用戶能夠方便地從異構的已有系統和數據源中抽取數據,
用來建立、部署、管理企業的數據倉庫,從而幫助企業做出快速、正確的決策。
此產品爲滿足企業級要求而設計,可以提供企業部門的數據和電子商務數據源之間的集成,
如XML,網站日誌,關係型數據,主機和遺留系統等數據源。
此平臺性能可以滿足企業分析最嚴格的要求。 
Informatica PowerCenter已被全球多家著名企業用來建設BI/DW系統,
它可集成和分析企業的關鍵商務信息,優化整個商務價值鏈的表現和響應速度。
Informatica PowerCenter擁有一個功能強大的數據整合引擎,
所有的數據抽取、轉換、裝載的功能都是在內存中執行的,不需要開發者手工編寫這些過程的代碼。
Informatica PowerCenter 數據整合引擎是元數據驅動的,
通過知識庫和引擎的配對管理,可以保證數據整合過程能夠最優化執行,
並且使數據倉庫管理員比較容易對系統進行分析管理,從而適應日益增加的數據裝載和用戶羣。

二、informatica開發步驟:
定義源: Desinger
定義目標: Desinger
創建映射: 源--》轉換組件--》目標
Mapping都是由源表、轉換組件和目標表組成,用於描述數據抽取的過程。
源表和目標表可以從源和目標文件夾拖拽到工作區,轉換組件需要手動創建。
Mapping設計的關鍵就是轉換組件的使用,這關係到數據抽取的正確性和效率。
定義任務: Workflow Manager
創建工作流: Workflow Manager
工作流調度監控 : Workflow Monitor

三、轉換組件
1. 組件列表
Source Qualifier 從數據源讀取數據
Expression 行級轉換
Filter 數據過濾
Sorter 數據排序
Router 條件分發
joiner 異構數據關聯連接
Lookup 查詢連接
Aggregator 聚合
Update Strategy 對目標編輯(insert\update\delete\reject)
Union 數據合併
Sequence Generator 序列號生成器
Normalizer 記錄規範化
Rank 對記錄進行TOPx
Transaction Control 對裝載數據按條件進行事物控制
Stored Procedure 存儲過程組件
Custom 用戶自定義組件
HTTP WWW組件
Java Java自編程組件
其它應用組件

2. 組件類型
Passive類型:流入流出組件的行數不發生變化,如:Expression、Lookup、HTTP組件。
Active類型 :流入流出組件的行數會發生變化,如:Aggregator、Router、Filter組件。
Connected :表示該轉換組件需要連接到數據流。
Unconnected :表示該轉換組件可以不連接到數據流。
四、組件
1.Source Qualifier組件
作用:根據查詢SQL從關係表讀取數據或直接從文件中讀取數據。
用法:創建好Source Qualifier後,將需要用的字段從源表拖拽到SQ,雙擊SQ,對SQ屬性進行設置。
命名:SQ_Name
類型:Active/Connected
屬性解釋:
Sql Query: 用戶定義的 SQL 語句。先生成SQL,再進行改寫。
User Dfined Jion:聯接不同源的 WHERE 子句。連接多張表的關聯條件。
Source Filter:對源記錄應用的篩選器。非連接條件外的其他查詢條件。
Number Of Sorted Ports:用於排序的輸入端口數量
Select Distinct:僅選擇相異值。去重。
Pre SQL:在管道運行之前使用源數據庫連接執行的 SQL 語句。
Post SQL:在管道運行之後使用源數據庫連接執行的 SQL 語句。
Output is deterministic:在會話運行期間源數據不更改。
Output is repeatable:源數據已排序。
注意:
N個同構數據源只需要1個Source Qualify組件關聯,
關聯時建議將Source設計區將需要關聯的源表手工用連線關聯起來,
在Mapping設計區刪除各個源所帶的Source Qualify組件,
用一個新的Source Qualify組件包含所有源的字段內容。

例2:從emp表中只複製20號部門的數據到t_emp_2中
Source Qualifier組件--》“屬性”頁籤--》Source Filter=“EMP.deptno=20”

例3:從emp和dept兩張源表複製30號部門的數據到目標表t_emp_3
拖入兩張源表,刪除單一的Source Qualifier組件,點SQ重新生成Source Qualifier組件。
User Defined Join=“DEPT.DEPTNO=EMP.DEPTNO”
Source Filter=“EMP.deptno=30”

作業1:
源表:學生表、課程表、成績表(建表語句和數據見《學生表及數據.txt》) 
目標表:(學生名、出生日期、課程名、講師、成績)
create table t_students(
s_name varchar2(20),
birth date,
c_name varchar2(20),
t_name varchar2(20),
grade number(3)
);
從3個源表向目標表t_students抽取數據。
注意:如果有大數據量的表,則可能導致內存被沾滿,其他表加載不上。

2.Expression 組件
作用:
基於行級的數據項賦值、修改、計算;
在同行記錄中可新增、減少數據項。
用法:
創建好Expression 組件後,將需要用到的字段從其他組件拖拽到EXP中,雙擊EXP,新增輸出端口,編輯該端口的表達式。
命名:EXP_Name
類型:Passive/Connected

應用範圍:
數據類型轉換,例如Expression:to_date(Port1,'yyyymmdd')
數據項計算,例如Expression:(Port1,Port2)/Port3
新增變量,例如Expression:i=i+1
I項: 流入組件的數據項
O項:流出組件的數據項
V項:組件中定義的變量
Expression項: 對數據進行計算的表達式 
Default value項:當數據項爲空時的默認值

例4:從emp表中複製數據到t_emp_4中,
t_emp_4表記錄年薪並對職位進行+部門號處理,

作業:
源表:EMP 
目標表:emp_zuoye_2
功能:工資加500,職員姓名改小寫

3.Filter 組件
作用:
對流入組件中的記錄數據進行過濾;
類似於關係型數據庫的where;
與Source Qualifier的過濾功能區別在執行位置上。
用法:創建好Filter 組件後,將需要的用的字段從其他組件中拖拽到FIL中,
雙擊FIL,對FIL的屬性進行設置,Filter Condition寫入類似where條件的表達式即可。
命名:FIL_Name
類型:Active/Connected
屬性解釋:
Filter Condition:對記錄應用的篩選器。where條件。
Tracing Level:會話日誌中的詳細信息量
注意:
在Source Qualifier中User Defined Jion、Source Filter、Number of Sorted Ports中定義了sql條件,
那麼,在Filter 組件中就不要再重寫相關的sql條件,否則,將不會生效。

例5:從文件或emp表中複製10號部門的數據到t_emp_5中
構造源文件emp.txt, 源--》從文件導入
E:\Informatica\9.6.1\server\infa_shared\SrcFiles\emp.txt

作業2:
源表:成績文件
目標表:(學生號、課程號、成績)
要求:只輸出大於等於60的成績信息

4.Router組件
作用:
對流入組件中的記錄數據按照條件進行分發。
用法:在組頁籤增加分組和分組條件。
命名:RT_Name
類型:Active/Connected
屬性解釋:
Tracing Level:會話日誌中的詳細信息量
應用範圍:數據分發

例6:將emp表的數據按照部門分別導入到T_emp6_10、T_emp6_20、T_emp6_30三張表內。
源:emp表
目標:T_emp6_10、T_emp6_20、T_emp6_30三張表
用位置關聯
ora-26002 將target load type改爲normal

作業3:
源表:成績表
目標表:T_grade_80、T_grade_60、T_grade_default (學生號、課程號、成績)
要求:
T_grade_80保存成績在80-100的成績表信息;
T_grade_60保存成績在60-79的成績表信息;
T_grade_default保存成績在0-59的成績表信息。

5.Joiner組件 
作用:
對異構數據進行關聯(連接查詢來自不同數據庫的表或者文件),同構數據關聯使用Source Qualify組件;
類似於SQL中的Join語句。
用法:創建好Joiner組件後,將需要用的字段從轉換組件拖拽到Joiner中,雙擊Joiner,對屬性進行設置。
用於連接的兩張表分爲爲Master和Detail,選取小表爲Master,大表爲Detail即可。
命名:JNR_Name
類型:Active/Connected
屬性解釋:
Cache Directory:用於緩存主記錄的目錄
Join Condition:聯接條件
Join Type:聯接類型分爲4種,Normal Join等值連接,Master Outer Join左外連接,Detail Outer Join右外連接,Full Outer Join全鏈接
Null ordering in master:確定空值在主關係中是最高值還是最低值
Null ordering in detail:確定空值在詳細關係中是最高值還是最低值
Tracing Level:會話日誌中的詳細信息量
Joiner Data Cache Size:聯接器緩存中用於存儲數據的容量(以字節爲單位)
Joiner Index Cache Size:聯接器索引緩存中用於存儲數據的容量(以字節爲單位)
Sorted Input:定義是否對輸入數據進行排序。
Master Sort Order:定義主項的排序順序: 升序或降序。
Transformation Scope:定義對輸入數據執行轉換的範圍

應用範圍:2個異構數據類型的表關聯。
注意:
將數據量少的設置爲Master;
需要對SQ中連接字段進行改名處理;
儘量多使用Normal Join 和 Master Outer Join兩種類型連接,因爲其它兩種連接效率低。

5.1 同構、異構Joins對比
同種結構數據 不同DB或Flat與Flat之間
Source Qualify組件 Joiner組件
從源直接Joins 在PowerCenter中Joins
n個源可用1個SQ組件 n個SQ組件加上n-1個joins組件
在源中先定義連接關係 在Joiner組件中定義連接條件
5.2 Master和Detail選取
選取記錄量小的數據源作爲Master(選中M),
則另一個數據源爲Detail,
Join條件爲Master.主鍵列=Detail.主/外鍵列
5.3 Join類型
Normal Join 等值連接
Master Outer Join Detail全外連接
Detail Outer Join Master全外連接
Full Outer Join 全連接
例7:
描述:從emp.txt文件和dept表中等值連接並複製數據到t_emp_7。
源表:emp.txt文件、dept表
目標:t_emp_7
要點:用joiner組件進行Mapping設計

作業4:
源表:學生表、課程表、成績文件
目標表:(學生名、出生日期、課程名、講師、成績)
步驟:
將源表學生表、課程表通過SQ先連接,再通過Joiner組件連接成績文件,最後到目標表。

5.4 Sorter組件
作用:排序。
按照某個或多個字段進行排序(升序或降序)。
用法:創建好Sorter組件後,將需要用的字段從轉換組件拖拽到Sorter中,雙擊Sorter,對屬性進行設置。
在Ports頁籤選定key,再選擇asc/desc。
命名:Sort_Name
類型:Active/Connected
屬性解釋:
Case Sensitive:排序時大小寫是否敏感。
Distinct:獲取唯一值。實現了sql中的Distinct功能。
Null Treated Low:是否將null值認爲是小數。
例7-2:
描述:對例7進行改造,加入排序組件,以優化執行速度。
源表:emp.txt文件、dept表
目標:t_emp_7
要點:使用sorter組件對emp.txt文件、dept表中的deptno列進行排序,勾選Joiner組件的Sorted Input屬性。

6.Lookup組件
作用:
對Flat File或數據庫根據關聯的條件進行查詢;
返回符合條件的值,否則爲空;
類似於SQL中的select子查詢。
用法:創建Lookup的時候選擇要查詢的表。
有連接數據流和不連接數據流兩種用法。
連接數據流方式:將要關聯查詢的字段從其他轉換組件拖拽過來,然後雙擊LKP進行屬性配置。
命名:LKP_Name
類型:Passive/Connected or Unconnected
屬性解釋:
Lookup Sql Override:針對查找值的替換查詢。設置查詢SQL。
Lookup table name:查找源表
Lookup Source Filter:應用於查找記錄的篩選器。
Lookup caching enabled:會話過程中的緩存查找值。啓用緩存,提高效率。
Lookup policy on multiple match:查找轉換髮現多個匹配時如何處理。
Lookup condition:對查找值應用的篩選器。設置查詢條件。
Connection Information:來自源或目標的查詢記錄
Source Type:數據庫、平面文件或管道
Tracing Level:會話日誌中的詳細信息量
Lookup cache directory name:查找緩存文件所在的目錄名稱。
Lookup cache persistent:指示緩存是持久的還是非持久的。是否使用永久緩存。
Lookup Data Cache Size:查找緩存中用於存儲數據的容量(以字節爲單位)
Lookup Index Cache Size:查找索引緩存中用於存儲數據的容量(以字節爲單位)
Dynamic Lookup Cache:用未發現的或新的查找值更新查找緩存
Synchronize Dynamic Cache:使插入與關係源同步。
Output Old Value On Update:定義在更新動態緩存中的行時是否輸出輸出端口的舊值。
Update Dynamic Cache Condition:僅當此條件爲 True 時才更新動態緩存。
Cache File Name Prefix:保留的緩存文件的文件名前綴。查找將從命名緩存文件讀取(如果合適),並保留到命名緩存文件中
Re-cache from lookup source:首次調用查找實例時,從查找源重建查找緩存
Insert Else Update:如果在緩存中找不到該記錄則插入,若找到則將其更新。標誌用於動態查找緩存
Update Else Insert:如果在緩存中找到該記錄則將其更新,找不到則插入。標誌用於動態查找緩存
Datetime Format:日期時間格式字符串
Thousand Separator:數值數據的千位分隔符
Decimal Separator:數值數據的小數分隔符
Case Sensitive String Comparison:字符串比較(區分大小寫)
Null ordering:確定空值是最高值還是最低值
Sorted Input:定義是否對輸入數據進行排序。
Lookup source is static:在會話運行期間查找源將不會更改。
Pre-build lookup cache:指定是否允許在實際需要之前預先構建查找緩存。
應用範圍:
查詢文本文件的關聯數據;
查詢數據庫的關聯數據。
6.1 連接Lookup與非連接Lookup
連接Lookup:流入值--》Lookup源--》查詢到的值
查詢條件:列=輸入列
非連接Lookup:是否查詢--》Lookup組件--》返回查詢到的值
查詢條件:IIF(ISNULL(列),:lkp.MYLOOKUP(替換列),列)

6.2 Lookup組件項
L:查詢的數據項
R:返回值
注意:
如果Lookup表的類型是源表,則儘量使用Joiner組件替換Lookup組件,因爲表連接比select子查詢效率高。
一個已連接的Lookup組件不能再被其他轉換組件調用。
如果查詢表在session運行過程中不會改變,使用Lookup cache persistent屬性可以提高性能;
儘量不要在Lookup Sql Override屬性中使用order by子句,因爲cached Lookup組件默認有order by。

例8:從emp、dept表中複製數據到t_emp_8中,t_emp_8中包含部門名稱,使用emp作爲源表、dept作爲lookup表

例8-2:給例8增加條件,只找到工資大於3000的職員的部門名
IIF(SAL>3000,:LKP.LKP_DNAME(DEPTNO),'')
錯誤:TM_6190 無法標識用作查找轉換或存儲過程轉換的$Source或$Target的具有唯一性的關係連接或應用程序連接。
解決方法:Connection Information屬性由$Source改爲O_source即可。

例9:從emp表中複製數據到t_emp_9中,t_emp_9中包含empno,ename,mgr,mgr_name。

作業5:
源表:成績表
目標表:t_grade_lookup(學生名、課程名、成績)
步驟:
源表(成績表)通過兩個Lookup組件將學號轉爲學生名、課程號轉爲課程名,最後保存到目標表。

7.Aggregator 組件
作用:
執行分組聚合運算,對數據集進行聚合;
聚合分爲:sum、avg、count、max、min
用法:創建好Aggregator 組件後,將需要用的字段從其他轉換組件中拖拽到AGG中,
雙擊AGG,
在端口頁中每個端口都有group by選項,
勾上需要分組的列,新增端口,編寫聚合表達式,實現分組聚合運算。
命名:AGG_Name
類型:Active/Connected
屬性解釋:
Cache Directory:緩存的彙總值的目錄
Tracing Level:會話日誌中的詳細信息量
Sorted Input:如果選中,則認爲到該轉換的輸入已經由 GroupBy 端口排序。參與Group By的字段是否已經過排序。
Aggregator Data Cache Size:彙總器緩存中用於存儲數據的容量(以字節爲單位)。參與聚集彙總的變量和輸出數據項的表達式所佔內存。
Aggregator Index Cache Size:彙總器索引緩存中用於存儲數據的容量(以字節爲單位)。參與Group By的字段所佔用的內存。
Transformation Scope:定義對輸入數據執行轉換的範圍
7.1 Aggregator 組件項
Group By:用於分組的列
O:輸出列
Expression:用於書寫彙總函數表達式
7.2 Aggregator 組件函數
sum(待彙總列,IIF(條件,待彙總列,)) 將不符合條件的值默認賦值爲Null
IIF(條件,sum(待彙總列)) 將不符合條件的值默認賦值爲0
注意:可使用本地變量

例10:從dept、emp表中複製數據到t_emp_10中,
t_emp_10包括下面列(部門編號、部門名、辦公地點、員工人數、工資總和)

作業6:
源表:學生表、課程表、成績表
目標表:t_course_Aggregator(課程號、課程名、老師名、平均分、最高分、最低分、學生數、及格人數、不及格人數)
步驟:

作業7:
描述:計算每個職員工資佔部門總工資的百分比。
源表:emp表
目標:t_emp_10_2
要點:先獲取部門總工資,再連接,最後計算百分比。

8.Rank組件 等級轉換
作用:排序記錄,只輸出最頂層行或最底層的n個記錄
用法:創建好Rank後,將需要用的記錄從轉換組件拖拽到Rank中,
雙擊Rank,對Rank的屬性進行設置。
在端口頁籤選擇分組列和R列(等級列或排序列),在屬性頁籤設置Top/Bottom屬性和Number of Ranks屬性。
命名:RANK_Name
類型:Active/Connected
屬性解釋:
Cache Directory:緩存的等級值的目錄
Top/Bottom:選擇頂部或底部等級
Number of Ranks:每一等級中的記錄數
Case Sensitive String Comparison:字符串比較(區分大小寫)
Tracing Level:會話日誌中的詳細信息量
Rank Data Cache Size:等級緩存中用於存儲數據的容量(以字節爲單位)
Rank Index Cache Size:等級索引緩存中用於存儲數據的容量(以字節爲單位)
Transformation Scope:定義對輸入數據執行轉換的範圍
注意:可以使用本地變量

例11:
源表:emp
目標表:T_emp_11
功能:從源表emp中取出每個部門工資前3名的信息到目標表中。

作業8:
源表:學生表、課程表、成績表
目標表:t_course_rank(課程名、學生名、成績)
功能:從源表(學生表、課程表、成績表)中取出每門課程成績前2名的信息到目標表中。

9.Union組件 數據合併
屬性解釋:
Language:用於開發此自定義轉換的編程語言。
Module Identifier:包含過程的 DLL 或共享庫的名稱。
Function Identifier:該過程在模塊中的名稱。
Runtime Location:包含 DLL 或共享庫的位置。
Tracing Level:會話日誌中的詳細信息量
Is Partitionable:如果此轉換不能在多個分區運行,則選擇“否”。
如果此轉換可以在多個分區運行,但那些分區必須在同一個節點上運行,則選擇“本地”。
如果每個分區都可以在一個網格的不同節點上運行,則選擇“跨整個網格”。
Inputs Must Block:指定與轉換關聯的過程是否阻止傳入數據。
在過程代碼不阻止傳入數據時,或在它可以選擇使用阻止算法或非阻止算法時,可以清除此選項。
Is Active:指定此轉換是主動轉換還是被動轉換。
當啓用此選項時,轉換可以爲每個輸入行生成 0、1 或更多個輸出行。
否則,它只可以爲每個輸入行生成 0 或 1 個輸出行。
Update Strategy Transformation:指定此轉換是否爲輸出行定義更新策略。
Transformation Scope:指定 Informatica 集成服務如何將轉換邏輯應用於傳入數據: 
應用到“行”、“事務”,還是“所有輸入”。對於被動轉換,此屬性爲“行”。
Generate Transaction:指定此轉換是否可以生成事務。
Output Is Repeatable:指定輸出數據是否排序:“從不”、“基於輸入順序”或“始終”。對於被動轉換,該屬性爲“基於輸入順序”。
Requires Single Thread Per Partition:指定此自定義轉換是否要求每個分區一個線程。
如果選中,此自定義轉換的每個分區將由且僅由一個線程執行。
Output Is Deterministic:在會話運行期間生成同一組輸出數據。

例12:將源表stu_java 和stu_oracle中的數據同步到目標表T_stu中。
源表:stu_java、stu_oracle
create table stu_oracle(
id number(16) primary key,
sname varchar2(20),
birth date 
);
create table stu_java(
id number(16) primary key,
sname varchar2(20),
birth date 
);
insert into stu_oracle (id,sname,birth) values (1,'zhangsan',sysdate-8000);
insert into stu_java (id,sname,birth) values (2,'lisi',sysdate-7800);
目標表:T_stu
create table t_stu(
id number(16) primary key,
sname varchar2(20),
birth date,
major varchar2(10)
);

作業9:
源1:從emp表找職位是CLERK的人員
源2:從emp表找部門編號是30的人員
目標表:T_emp_Union
功能:因爲7900人員同時滿足職位是CLERK和部門編號是30,所以會重複找到兩次;
給目標表不設主鍵,驗證Union組件不去重功能。


10.Sequence Generator 序列號生成器
作用:產生主鍵
用法:創建Sequence Generator後,雙擊SEQ,對SEQ的屬性進行設置。
命名:SEQ_Name
類型:Passive/Connected
屬性解釋:
Start Value:起始值
Increment By:步長,向當前值添加了增量
End Value:最大值
Current Value:當前值
Cycle:循環使用。如已達到最大值,則重置爲起始值
Number of Cached Values:每次會話運行生成的值的數量
Reset:每次會話運行都以當前值重新啓動該序列
Tracing Level:會話日誌中的詳細信息量
注意:
Sequence Generator只有兩個輸出端口,沒有輸入端口;
如果該SEQ設置爲可以重複使用時,不能選擇Reset選項。

例13:
源表:emp表、emp文件
目標表:t_emp_13
注意:emp表和emp文件中原來的主鍵數據是重複的,目標表需要重新設置主鍵字段,並用Sequence Generator生成主鍵信息。

作業10:
源表:dept表、dept文件
目標表:T_dept_Union
功能:dept表和dept文件中原來的主鍵數據是重複的,目標表需要重新設置主鍵字段,並用Sequence Generator生成主鍵信息。

11.Stored Procedure
作用:調用一個存儲過程
用法:創建Stored Procedure的時候連接數據庫選擇必要的存儲過程。
SP有連接和不連接到數據流兩種用法。
連接到數據流方式跟一般的轉換組件類似,通過拖拽端口來實現數據流。
不連接到數據流分爲表達式調用和Pre-/Post session兩種方式。
表達式調用方式中SP被Mapping中另一個轉換組件中的表達式調用。
Pre-/Post session方式就是在session的屬性中配置SP的運行時間,具體如下:
Source Pre-load :session從源表查詢數據之前調用。
Source Post-load :session從源表查詢數據之後調用。
Target Pre-load :session將數據插入目標表之前調用。
Target Post-load :session將數據插入目標表之後調用。
命名:SP_Name
類型:Passive/Connected or Unconnected
屬性解釋:
Stored Procedure Name:存儲過程名稱
Connection Information:調用源或目標中的過程
Call Text:調用語法,包括參數
Stored Procedure Type:會話期間調用該過程的時間
Execution Order:集成服務調用該過程的順序
Tracing Level:會話日誌中的詳細信息量
Subsecond Precision:日期時間輸出端口的精度,例如,毫秒對應的值爲 3
Output is Repeatable:指定輸出數據是否基於輸入順序進行排序。對於被動轉換,該屬性爲“基於輸入順序”。
Output is Deterministic:指定是否爲相同的輸入提供相同的輸出
注意:

例14:從dept、emp表中複製數據到t_emp_14中,
t_emp_14包括下面列(部門編號、部門名、辦公地點、員工人數、工資總和)
要求:先編寫一個存儲過程,再調用過程來實現數據同步
create table t_emp_14 
(
deptno number(2) not null primary key,
dname varchar2(14),
loc varchar2(13),
sum_sal number(15,2) ,
e_cnt number(15,2) 
);

create or replace procedure proc_dept_all
is 
v_sal number(15,2);
v_cnt number(15);
begin
-- for rs in (select * from scott.dept where exists (select 1 from scott.emp where emp.deptno=dept.deptno)) loop 
for rs in (select * from scott.dept where deptno in (select deptno from scott.emp)) loop 
select count(1) into v_cnt from t_emp_14 where deptno=rs.deptno;
if v_cnt=0 then
insert into t_emp_14 (deptno,dname,loc) values (rs.deptno,rs.dname,rs.loc);
end if;
end loop;
for rs in (select * from t_emp_14) loop
select sum(sal),count(1) into v_sal,v_cnt from scott.emp where deptno=rs.deptno;
update t_emp_14 set sum_sal=v_sal,e_cnt=v_cnt where deptno=rs.deptno;
end loop;
end;
/
show err;


create or replace function func_emp14_sal(p_deptno number) return number
is 
v_sal number(15,2);
begin
select sum(sal) into v_sal from scott.emp where deptno=p_deptno;
return v_sal;
end;
/
show err;

create or replace function func_emp14_cnt(p_deptno number) return number
is 
v_cnt number(15,2);
begin
select count(1) into v_cnt from scott.emp where deptno=p_deptno;
return v_cnt;
end;
/
show err;

12.Update Strategy 組件
作用:
對流過組件的每一條記錄賦一個操作標誌(插入、刪除、更新、忽略);
根據操作標誌對目標關係型數據庫表生成sql操作;
操作標誌有DD_INSERT、DD_DELETE、DD_UPDATE、DD_REJECT
用法:
創建好Update Strategy後,將需要的字段從轉換組件拖拽到US,雙擊US,對US的屬性進行設置。
創建LOOKUP組件選擇目標表,根據源表的主鍵去目標表查詢,如果查不到數據,就給目標表新增;
如果查到數據就判斷源表和目標表的數據是否相同(比較所有字段),如果相同就放棄,不相同則更新目標表。
操作:
創建LOOKUP組件後會自動加載目標表所有字段(刪除不需要用到的字段),
再從SQ組件中拖拽源表主鍵字段到LOOKUP組件,並設置關聯條件;
將SQ組件源表所有字段拖拽到Update Strategy 組件中,
再將LOOKUP組件中目標表所需要用到的字段拖拽到Update Strategy 組件中,並給字段名增加_T(用以表示目標的字段);
設置Update Strategy Expression屬性爲:
IIF(isnull(EMPNO_T),dd_insert,IIF(EMPNO=EMPNO_T and SAL=SAL_T,dd_reject,dd_update))
將Update Strategy 組件中源表的字段拖拽至目標表。
檢查並修改任務屬性Treat source rows as=Data Driven。

命名:UPD_Name
類型:Active/Connected
屬性解釋:
Update Strategy Expression:對記錄標記,標記要插入、刪除、更新或拒絕的記錄的表達式。
Forward Rejected Rows:將被拒絕的行轉發到下一轉換。記錄是在當前丟棄還是到下個組件丟棄。
Tracing Level:會話日誌中的詳細信息量
應用範圍:
數據增量更新;
對目標編輯。
注意:
關鍵是Update Strategy Expression屬性的設置,使用IIF或decode函數對記錄的每一行進行判斷,
爲每一行賦予DD_INSERT、DD_DELETE、DD_UPDATE、DD_REJECT(對應值爲0、1、2、3)中的一個值,
表明該行在數據庫中將進行的(增、刪、改、忽略)某種操作。
mapping中有US時,mapping對應的session在配置屬性時必須把Treat rows屬性設置爲Data Driven,否則US無效。

例15:從emp表中複製數據到目標表t_emp_15中,
然後對emp表進行增、刪、改操作,並將增、刪、改操作影響的行更新到目標表t_emp_15中。
connect bi_target/bi_target;
create table t_emp_15 as select * from scott.emp;
select * from t_emp_15;

connect scott/123;
insert into emp (empno,ename) values (1112,'abcd');
update scott.emp set sal=20000 where empno=7839;
--delete emp where empno=7900;
--update emp set sal=8000 where empno=7934;

Update Strategy屬性設置:
IIF(條件,真,假)
IIF(isnull(EMPNO_T),dd_insert,IIF(EMPNO=EMPNO_T and SAL=SAL_T,dd_reject,dd_update))
IIF(ISNULL(EMPNO_T),DD_INSERT,IIF(EMPNO=EMPNO_T AND SAL=SAL_T,DD_REJECT,DD_UPDATE))

作業11:
源表:dept表
目標表:T_dept_Update
功能:實現對源表dept的新增、修改,同步複製到目標表T_dept_Update的功能。
IIF(isnull(DEPTNO),dd_insert,iif(DEPTNO=DEPTNO1 and DNAME=DNAME1 and LOC=LOC1,dd_reject,dd_update))

例16:從dept_temp表中複製數據到目標表t_dept_16中
create table dept_temp as select * from dept;
alter table dept_temp add action varchar2(10);
alter table dept_temp add action_date date;
alter table dept_temp add constraint pk_dept_temp primary key (deptno);
update dept_temp set action='insert',action_date=sysdate-20;
第一次抽取:
IIF(ACTION_DATE<TO_DATE('20180301','yyyymmdd'),DECODE(ACTION,'update',dd_update,'delete',dd_delete,dd_insert),dd_reject)

--10刪除
update dept_temp set action='delete',action_date=sysdate where deptno=10;
--20修改
update dept_temp set dname='123',action='update',action_date=sysdate where deptno=20;
--50新增
insert into dept_temp values(50,'bumen','loc','insert',sysdate);
後續抽取:
IIF(ACTION_DATE>=TO_DATE('20180301','yyyymmdd'),DECODE(ACTION,'update',dd_update,'delete',dd_delete,dd_insert),dd_reject)

13.Normalizer組件
作用:格式化記錄,將列表轉換爲行表。
用法:Occurs=要合併的列個數,將GCID_*轉換成對應的分類名
命名:NRM_Name
類型:Active/Connected
屬性解釋:
注意:

例20:
源表:工資表
create table emp_sal
(
empno number(10) not null primary key,
base_sal number(10,2) ,
jixiao_sal number(10,2) ,
gongling_sal number(10,2) ,
quanqin_sal number(10,2) 
);
insert into emp_sal values (111,2000,1800,100,300);
insert into emp_sal values (112,5000,0,500,300);

目標表:收入表
create table t_emp_20 
(
empno number(10) not null primary key,
income_type varchar2(20) ,
sal_amount number(10,2) 
);

14.Transaction Control組件
作用:控制事務的提交或回退。
Transaction Control組件是一個事務產生器,它在Mapping中定義或者重新定義事務的邊界。
Transaction Control組件同時清除了任何來自上游的事務。
用法:雙擊Transaction Control組件,在屬性頁籤設置Transaction Control Condition的值,來控制事務的提交或回退。

TC_CONTINUE_TRANSACTION 不進行任何事物變更
TC_COMMIT_BEFORE 提交當前事務,開啓新事物,當前行進入新事物
TC_COMMIT_AFTER 提交當前事務,開啓新事物,當前行留在本事物
TC_ROLLBACK_BEFORE 回退當前事務,開啓新事物,當前行進入新事物
TC_ROLLBACK_AFTER 回退當前事務,開啓新事物,當前行留在本事物

命名:TC_Name
類型:Active/Connected
屬性解釋:
Transaction Control Condition:事務控制表達式
Tracing Level:會話日誌中的詳細信息量
注意:
例21:使用mapping動態分發文件
以Dept爲例,按照LOC列將對應的數據寫入不同的文件中。
源--》SQ--》Sorter--》f(x)--》TX--》目標
目標中增加FileName列;
Sorter中對LOC列進行排序;
f(x)中定義本地變量:
LAST_VALUE 上次取值 表達式賦值爲CURRENT_VALUE
CURRENT_VALUE 本次取值 表達式賦值爲LOC
f(x)中定義輸出端口:
var_control 是否是同一個部門標識 表達式賦值爲IIF(LAST_VALUE=CURRENT_VALUE,1,0)
FileName 文件名 表達式賦值爲LOC.dat
TX中使用事務控制表達式:IIF(var_control=1,TC_CONTINUE_TRANSCATION,TC_COMMIT_BEFORE)

15.SQL Transformation組件
作用:使用mapping來執行SQL.
腳本模式:Script mode
查詢模式:query mode,又分爲靜態查詢和動態查詢
用法:
原爲文件,
拖入SQL Transformation組件,選擇靜態查詢,
查詢sql:select

注意:
?參數?
~動態變量~

1.6 JAVA Transformation
作用:使用Java代碼來處理informatica不能完成的工作。
使用Java來自定義轉換組件。

17.Custom Transformation
作用:除了info提供的轉換組件外,用戶可以使用Custom Transformation開發自己的特有的轉換組件。
使用C/C++來自定義組件。

18.Http Transformation
作用:從HTTP server獲取數據;更新HTTP server上的數據。

19.XML Source Qualifier組件
作用:根據查詢SQL從XML文件中查出所要的記錄
用法:
命名:XSQ_Name
類型:Passive/Connected
屬性解釋:
注意:

20.ERP Source Qualifier組件
作用:根據查詢SQL從ERP文件中查出所要的記錄
用法:
命名:ESQ_Name
類型:Active/Connected
屬性解釋:
注意:

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