Informatica_(3)組件

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

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

3、轉換組件
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自編程組件
其它應用組件sql

2. 組件類型
Passive類型:流入流出組件的行數不發生變化,如:Expression、Lookup、HTTP組件。
Active類型 :流入流出組件的行數會發生變化,如:Aggregator、Router、Filter組件。
Connected :表示該轉換組件須要鏈接到數據流。
Unconnected :表示該轉換組件能夠不鏈接到數據流。
4、組件
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抽取數據。
注意:若是有大數據量的表,則可能致使內存被沾滿,其餘表加載不上。session

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

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

例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_十、T_emp6_20、T_emp6_30三張表內。
源:emp表
目標:T_emp6_十、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、一、二、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屬性解釋:注意:

相關文章
相關標籤/搜索