Informatica_(4)工作流


三、workflow執行、監控
workflow是PowerCenter的執行單元;
一個workflow包括一個或者多個session(或task)。

1.session
session是mapping的實例化。
session是給mapping提供配置文件的場所或機制。
有了這些配置信息,mapping就可以執行了,所以說session是mapping的一個可執行實例。
session的兩種類型:Reusable session(可重復使用)和非Reusable session(不可重復使用)。
1.1 Reusable session(可重復使用session)
創建一次,可以被多次重用。
選中“Task Developer”,打開菜單“Tasks--》create”,輸入session名點“create”,選擇對應的mapping.
Reusable session可用以多個workflow或者worklet。

1.2 非Reusable session(不可重復使用session)
先創建workflow,再創建session。
選中“workflow designer”,打開菜單“workflows--》create”,輸入workflow名點“OK”,workflow的起始點“Start”創建成功;
再在workflow的工作區內創建session,即非Reusable session。
非Reusable session可以轉換為Reusable session,雙擊session,選中“make reuseable”。

2.workflow
2.1 並行執行
一個workflow同時鏈接多個session,並且多個session之間沒有依賴關系,可以並行執行以提升效率。
2.2 串行執行
一個workflow同時鏈接多個session,並且多個session之間存在依賴關系,需要按照依賴關系順序依次執行。
例外處理:對於后一個session依賴於前一個session的運行狀態時,雙擊連線,增加條件“$session1.status=succeeded”
2.3 調度:周期性的定時運行workflow
在“workflow designer”中打開一個workflow,打開菜單“workflows--》edit--》Scheduler Tab”,選中"Non Reuseable",點“應用”,
設置完成后,需要執行Schedule workflow。

3.worklet
worklet也是task/session的集合(和workflow一樣);
worklet不能單獨運行,只能放在workflow中,作為workflow的子集運行(和workflow的區別)。
worklet可以被一個或多個workflow調用。
選擇“worklet designer”,打開菜單“worklets-->create”,
worklets雖然也有“Start”,但他不可以獨立執行。
只有將worklets加入到workflow中才可以被執行。

4.command
command是workflow中的一個Task。
可以使用command調用外部命令或者shell。

5.control
control task 提供了通過workflow/worklet內的任務,控制workflow/worklet狀態的能力。
當關鍵任務失敗時,可以將進程指向control task,
在control task內設置控制選項。

6.發送e-mail
6.1 配置發送e-mail
需要配置集成服務確保其能夠發送郵件;
在PowerCenter服務器端安裝PowerCenter支持的發送郵件e-mail的客戶端;
--單獨安裝郵件服務器。
PowerCenter是否能發送郵件事實上和(具體的)郵件服務器無關,
重要的是郵件客戶端是否支持相關的協議,並且該客戶端可以支持相應的郵件服務器。

6.2 在workflow中使用e-mail
1.在workflow/worklet中發送e-mail
2.在session的components Tab中發送e-mail
3.在workflow的General Tab中發送e-mail

7.event tasks
event raise觸發事件,
event wait等待event raise觸發的事件,
一旦獲得了正在等待的時間,就會觸發其后續的Task。
7.1 用戶自定義事件使用
用戶自定義事件需要在workflow中定義一個Event對象。
首先在workflow中定義事件。菜單“workflows-->edit”,選中events Tab,增加一個事件(EventX);
在workflow中可以使用event raise和event wait;
在event raise中配置需要拋出的事件(EventX);
在event wait中配置需要監聽的事件(EventX);
當事件(EventX)被event raise拋出后,event wait將監聽到事件(EventX),從而觸發后續的流程。
7.2 預定義事件使用
預定義事件是一種File-Watch事件,即event wait等待一個觸發文件(.trigger文件)。
由人為手動觸發,僅使用event wait任務監聽是否發現觸發文件(.trigger文件)即可;
當發現該文件后,event wait任務觸發后續的流程。
觸發后觸發文件(.trigger文件)不會被自動刪除,
在event wait的屬性頁簽配置delete filewatch file選項即可刪除觸發文件(.trigger文件)

8.timer
timer是一個定時任務,它可以指定后續任務的啟動時間。
在timer頁簽指定時間,包括絕對時間和相對時間。
絕對時間可以使用物理時間,也可以用變量指定。
相對時間是指定距離上一個任務啟動的時間間隔。

9.decision
decision Task用於多個前置任務的與或非判斷。
“$s_1.Status=succeeded OR $s_2.Status=succeeded OR $s_2.Status=succeeded”
即前3個session只要有一個成功就執行后續session。

10.assignment
assignment Task的作用是給用戶定義的變量賦值(賦值可以是一個常量或者一個表達式)。
給workflow定義一個變量,菜單“workflows--》edit”,選擇Variables頁簽,輸入變量名($$var_int)、類型、是否永久。
在assignment Task中定義“$$var_int:=$$var_int+1”,並在后續的link condition中使用該變量做判斷。

四、常用功能匯集
11.debugger
D客戶端--》Mapping--》Debugger--》Start Debugger命令(快捷鍵F9);
依次選擇Next--》Using Existing Session--》Next--》Next即可。
菜單功能:
Start Debugger (快捷鍵F9) 開始調試;
Next Instance (快捷鍵F10) 繼續運行;
Continue (快捷鍵F5)運行到下一個斷點,如果沒有斷點,則運行到結束;
Edit Breakpoints (快捷鍵Alt+F9) 編輯斷點
Evaluate Expression 對表達式進行計算
進入Debug模式后,會在下方輸出窗口看到mapping中任一組件正在流入的數據和計算的結果。

12.Mapplet/Reusable transformation
Mapplet/Reusable transformation類似與存儲過程和函數,是某一種功能的集合,是為了提供公共功能的可重用性。
Mapplet與Reusable transformation區別在於Reusable transformation只能使用一個轉換組件,Mapplet可以使用多個轉換組件。

12.1 Reusable transformation
Reusable transformation是用一個轉換組件實現通用功能;
所有的Mapping都可以調用,但不能修改;
只能在Reusable transformation中進行修改,並且修改后所有調用的mapping全部適用。
舉例:
工資加100

12.2 Mapplet
Mapplet是用多個轉換組件實現通用功能,可是實現比Reusable transformation更復雜的功能;
所有的Mapping都可以調用,但不能修改;
只能在Mapplet中進行修改,並且修改后所有調用的mapping全部適用。
點擊“Mapplet Designer”,菜單Mapplet--》create,
Mapplet Input--》轉換組件--》Mapplet Output
注意:Mapplet可以包含源表,但是不能包含目標表。
舉例:
只對工資小於2000的員工工資加100

13.shortcut快捷方式
shortcut是為了解決數據源、數據目標或其他對象在跨Folder(文件夾)和跨Repository(存儲庫)方面的一致性及可重用能力。
用於解決公共對象重復存儲的問題,及重復存儲所帶來的同步更新問題。
解決方案:
創建一個Global Repository作為公司級的共享對象管理和存放位置;
在每個Repository中創建一個共享文件夾作為部門級的共享對象管理和存放位置。
分別成為Global shortcut和Local shortcut。
可以創建shortcut的對象包括:源定義、可重用的transformation、Mapplet、Mapping、目標定義、業務組件。
13.1 Local shortcut:在同一個存儲庫下的不同文件夾內共享。
創建Local shortcut是在同一個Repository中從共享文件夾向其他文件夾創建共享對象的過程。
首先,創建共享文件夾。在R客戶端,菜單“Folder--》Create”,勾選“Allow shortcut”。
其次,將所有公共的對象創建到共享文件夾中。
最后,創建Local shortcut,同時打開共享文件夾和其他非共享文件夾,將共享文件夾中的某個對象拖入非共享文件夾中。
在工作區雙擊shortcut,即可查看shortcut的詳細信息。

13.2 Global shortcut:在不同存儲庫之間共享。
創建Global shortcut是在不同的Repository之間從Global Repository向Local Repository創建共享對象的過程。
首先,必須有一個Global Repository和一個Local Repository。
PowerCenter默認創建的Repository都是Local類型,需要將Local存儲庫升級為Global存儲庫。
在控制台(Admin Console)中,選擇要升級的Local Repository,在屬性Tab中編輯,將Global Repository的值由false改為true;
注意:模式必須是獨占,並且該升級是不可逆的。
接着,注冊Local Repository。
在控制台(Admin Console)中,選擇Local Repository,選擇右側的菜單“Action--》Repository Domain--》Register Local Repository”,
在彈出框中選擇Global Repository和Local Repository,並輸入密碼,單擊OK。
打開R客戶端,發現Global Repository被加入到Local Repository中,即可以在本地存儲庫中看到全局存儲庫的對象。
最后,需要在本地存儲庫中創建共享文件夾,在共享文件夾中創建共享對象,將共享對象拖入到本地存儲庫的非共享文件夾的過程中即生成Global shortcut。
注意:Global Repository需要在命名上與Local Repository進行區分。

14.session相關屬性
session是mapping的可運行實例,一個mapping可以有多個session;
session提供了大量的屬性和配置選項以控制、優化session的運行。
14.1 Properties Tab相關參數
1.Write Backward Compatible Session Log File:兼容日志文件的格式(文本文件、*.bin文件)
Session Log File Name:指定日志文件的文件名;
Session Log File driectory:修改日志文件默認的存放路徑。
2.Enable Test Load & Number of Rows to Test:指定以較少的數據對session進行測試。
啟用Enable Test Load時集成服務不會將數據寫入目標表,但會執行session的全部其他邏輯。
3.Treat source rows as:指定每行數據的操作標簽,默認Insert。
Insert 插入數據;
Update 更新數據;
Delete 刪除數據;對於更新和刪除操作,目標表必須要有邏輯主鍵(powercenter內定義的主鍵),否則不能正確執行。
Data Driven 數據驅動, 需要與Update Stragety配合使用,由Update Stragety來為每行數據指定增、刪、改、拒絕中的某一種操作。
4.Rollback Transactions on Errors:集成服務(Integration Service)遇到非致命錯誤時也會回滾當前事務。
舉例:插入10條數據時,其中一條主鍵沖突,不勾選該選項,9條成功,1條失敗;選擇該選項10條數據都被回滾。
5.Java Classpath:如果在PowerCenter中使用了第三方的Java類包或者自定義的類,需要在此指定相關的Java類包的路徑,
尤其是使用Java Transformation時。
6.Session retry on deadlock:在Normal寫的情況下,發生目標寫死鎖,PowerCenter將嘗試再次向目標寫入,
嘗試寫入的次數取決於參數Number of Deadlock Retires,這是集成服務的一個屬性。
14.2 Config Object Tab相關參數
1.Contraint Base Load Ordering:PowerCenter基於主外鍵的約束向目標表加載數據。
2.Custom Properties:PowerCenter在遇到問題時,有時需要使用一些內部參數輔助執行或者解決遇到的問題。
例如:OptimizeODBCWrite、OptimizeODBCRead等參數,一般為非公開屬性,聯系售后指導。
3.Log Options:為了跟蹤Session的歷史運行情況,包括解決問題、性能調優、滿足合規要求等。
Save Session log by:按次或者按照時間戳保存日志;
Save Session log for these runs:按次保存日志時設置的保存個數;
Session Log File Max Size: 設置Session Log文件的文件大小,默認為0,表示無限制;
對於Session Log特別大或者Real-Time Session時,最好設置Session Log文件的大小限制,單位為MB。
Session Log File Max Time Period: 設置Session Log文件的存放周期,單位為小時。
Maximum Partial Session Log Files: 設置Session Log的最大保存量,與單個文件的大小和保存周期有關;
如果超出最大保存量,保存期內最早的日志將被復寫。
Write Commit Statistics Log Frequency:默認值為1,每個commit都會被寫入日志。
Write Commit Statistics Log Interval: 寫Commit統計的時間間隔,單位是分鍾。
4.Stop on errors:即使有一行數據錯誤session也要停止運行,並標記為失敗(可用於關鍵的session)。
5.Override tracing:當session發生錯誤時,在調試中為了跟蹤session運行錯誤而啟動的不同日志級別;
日志級別過高會影響session的性能,因此在調試完成后需要恢復到默認值。
6.On Stored Procedure ERROR:默認為Stop,即當Stored Procedure發生錯誤時停止整個session;
選擇Continue時,即當Stored Procedure發生錯誤時繼續運行session。
7.On Pre-Session command task ERROR:默認為Stop,即當Pre-Session command發生錯誤時停止整個session;
選擇Continue時,即當Pre-Session command發生錯誤時繼續運行session。
8.On Pre-Post SQL ERROR:默認為Stop,即當Pre-Post SQL發生錯誤時停止整個session;
選擇Continue時,即當Pre-Post SQL發生錯誤時繼續運行session。
9.Error Log Type:有三個選項(None、Database、Flat File),默認值為None。
選擇Database可以將錯誤信息、異常信息存放到數據庫中;
選擇Flat File可以將錯誤信息、異常信息存放到文件中。

15.參數和變量
在程序中有可能變化的地方都應該盡量使用參數和變量。
15.1 Mapping參數
例子:
從EMP表中獲取某天入職的人員。
1.定義參數:
參數在使用前必須先定義。
在Mapping中定義參數。
Mapping參數是在Mapping層面的參數,不能跨Mapping使用。
新建/選擇一個mapping,菜單“映射--》參數和變量”,
“新建”參數,輸入參數名“$$VARDATE”,數據類型“string”,長度“29”,初始值“YYYY-MM-DD HH24:MI:SS”。
2.使用參數
在Mapping中使用參數。
打開SQ--》屬性頁簽,改寫Sql Query屬性:
SELECT EMP.EMPNO, EMP.ENAME, EMP.SAL
FROM EMP
WHERE EMP.HIREDATE >=to_date($$VARDATE,'YYYY-MM-DD HH24:MI:SS') and EMP.HIREDATE <to_date($$VARDATE,'YYYY-MM-DD HH24:MI:SS')+1
3.定義、使用參數文件
PowerCenter中參數通過文件傳遞。
先定義參數文件,再在Workflow中使用參數文件。
參數文件目錄及文件名:如:c:\para\para.txt。
文件內容:
[Global]
$$VARDATE='1987-4-19 00:00:00'
新建/選擇一個Workflow,菜單“工作流--》編輯”,打開“屬性”頁簽,
在Parameter Filename屬性中添加參數文件的路徑信息,如:c:\para\para.txt。
日期類型為什么要設置為string呢?
當$$VARDATE參數定義為string類型時,在參數文件中定義參數值必須使用單引號。
當$$VARDATE參數定義為日期類型時,在參數文件中定義參數值不能使用單引號;
但傳遞后的參數值1987-4-19 00:00:00不能和日期類型的數據庫字段比較,仍需要轉換;
並且數據庫中日期類型的長度和informatica日期類型的長度還存在差異。
4.參數文件格式
參數使用范圍用[]進行標注;
參數前綴格式:$$和$。

15.2 Mapping變量
參數在文件中定義,執行中不能被修改。
變量可以在PowerCenter中被重置,即通過函數動態的修改變量值。
例子:
從EMP表中獲取陸續入職的人員。
1.定義變量:與定義參數一致。
新建/選擇一個mapping,菜單“映射--》參數和變量”,
“新建”參數,輸入參數名“$$VARDATE”,數據類型“string”,長度“29”,匯總“Max”,初始值“1900-01-01 00:00:00“。
匯總分為“Max”和“Min”,“Max”可以獲取上次運行的參數$$VARDATE的最大值;
當設置為“Max”后,可以使用SetMaxVariable函數,設置為“Min”則不可以使用SetMaxVariable函數。
2.編輯SQ:使用變量
打開SQ--》屬性頁簽,改寫Sql Query屬性:
SELECT EMP.EMPNO, EMP.ENAME, EMP.HIREDATE, EMP.SAL
FROM
EMP
where EMP.HIREDATE>to_date('$$VARDATE','YYYY-MM-DD HH24:MI:SS')
為了支持continous運行,使用大於號(>)獲取上次運行結束到當前最新的全部數據。
3.更新變量:使用f(x)
增加表達式轉換組件,輸入HIREDATE,輸出OUT_VARDATE,
表達式為:SETMAXVARIABLE($$VARDATE,TO_CHAR(HIREDATE,'YYYY-MM-DD HH24:MI:SS'))
-- 再增加表達式轉換組件,輸入OUT_VARDATE,輸出HIREDATE,並鏈接到目標表中,
-- 表達式為:TO_DATE(OUT_VARDATE,'YYYY-MM-DD HH24:MI:SS');
在目標表中增加HIREDATE_S字段,將OUT_VARDATE鏈接到目標表中;
從SQ中鏈接其他字段到目標表中。

注意:
PowerCenter為了執行優化的目的,沒有被下游使用的端口將不被計算。
即如果不將計算后的HIREDATE鏈接到目標表,則變量不會被更新為最大值。
4.測試
制作工作流(不需要使用參數文件)並運行,session使用了變量的初始值“1900-01-01 00:00:00“。
運行完成后,選中Session右鍵--》查看永久值,可以看到變量值已進行了更新;
給EMP再增加數據,再次運行工作流新增加的數據被同步到目標表,變量值再次更新。
5.變量操作函數
SetMaxVariable($$Variable,value) 從value和$$Variable中選擇最大值更新$$Variable;
SetMinVariable($$Variable,value) 從value和$$Variable中選擇最小值更新$$Variable;
SetVariable($$Variable,value) 直接使用value更新$$Variable;
SetCountVariable($$Variable) 根據session運行時行標簽更新$$Variable,
當行標簽為Insert時變量值加1,當行標簽為Delete時變量值減1,當行標簽為Update時變量值不變。

15.3 系統/session參數與變量
參數和變量都配置在Session中,如$PMTargetFileDir、$PMBadFileDir等。
這些變量有哪些、在哪里定義、是否可以修改呢?
在控制台(Admin Console)中打開"集成服務--》進程“ 可以看到所有的參數,
修改后將影響集成服務下的所有session,這些參數被稱為系統參數。
$PMRootDir E:\Informatica\9.6.1\server\infa_shared
$PMSessionLogDir $PMRootDir/SessLogs
$PMBadFileDir $PMRootDir/BadFiles
$PMCacheDir $PMRootDir/Cache
$PMTargetFileDir $PMRootDir/TgtFiles
$PMSourceFileDir $PMRootDir/SrcFiles
$PMExtProcDir ./ExtProc
$PMTempDir $PMRootDir/Temp
$PMWorkflowLogDir $PMRootDir/WorkflowLogs
$PMLookupFileDir $PMRootDir/LkpFiles
$PMStorageDir $PMRootDir/Storage

PowerCenter還提供了大量session級別的參數,根據特性分為:
用戶定義的session參數(User-Defined Parameter);
內置的session參數(Build-in Parameter)。
1.用戶定義的session參數
參數類型 命名規范 描述
Session Log File $PMSessionLogFile 定義Session Log文件名
Number of Partitions $DynamicPartitionCount 定義Session Partition的數量
Source File $InputFile* 定義Source File文件名
Lookup File $LookupFile* 定義Lookup File文件名
Target File $OutputFile* 定義Target File文件名
Reject File $BadFile* 定義Reject File文件名
Database Connection $DBConnection* 定義關系型數據庫連接的連接名,包括源、目標、Lookup和存儲過程等。
External Loader Connection $LoaderConnection* 定義Loader連接的連接名
FTP Connection $FTPConnection* 定義FTP連接名
Queue Connection $QueueConnection* 定義Queue連接名
Application Connection $AppConnection* 定義Application連接名
General Session Parameter $Param* 通用Session參數定義,可以通過此參數定義如:table owner name、
table name prefix、FPT file or目錄名、lookup cache file name prefix、email address等
除*外其余不能修改,*為用戶自定義部分,可根據需要替換為實際的名稱。
參數需要定義在參數文件中,並為參數賦值。
使用場景:
場景1:項目中有開發、測試、生產3個環境,分別使用不同的數據庫,部署過程需要修改大量的mapping和session的數據庫連接,可以將數據庫連接作為參數。
場景2:批量目錄修改的問題,對目錄使用參數,僅修改參數文件即可。
2.內置的session參數
session內置的參數可以幫助開發人員在Post-Session shell commands、sql commands和E-mail中獲取session運行時狀態或者信息。
參數類型 命名規范
Folder Name $PMFolderName
Integration Service Name $PMIntegrationServiceName
Repository Service Name $PMRepositoryServiceName
Repository User Name $PMRepositoryUserName
Session Name $PMSessionName
Session Run Mode $PMSessionRunMode
Source Number of affected Rows $PMSourceQualifierName@numAffectedRows
Source Number of applied Rows $PMSourceQualifierName@numAppliedRows
Source Number of rejected Rows $PMSourceQualifierName@numRejectedRows
Source table name $PMSourceName@TableName
Target Number of affected Rows $PMTargetName@numAffectedRows
Target Number of applied Rows $PMTargetName@numAppliedRows
Target Number of rejected Rows $PMTargetName@numRejectedRows
Target table name $PMTargetName@TableName
Workflow name $PMWorkflowName
Workflow run ID $PMWorkflowRunId
Workflow run instance name $PMWorkflowRunInstanceName

15.4 workflow/worklet變量
例子:
將session的輸出文件寫入對應日期的文件夾,如果文件夾不存在,則自動創建文件夾。
1.創建mapping,目標為文件
源為EMP表,目標為EMP文件。
”目標--》創建“,輸入目標表名稱,數據庫類型選擇”Flat File“后點”創建“,維護列信息。
2.創建workflow,並定義變量
”工作流--》創建“,輸入工作流名稱,點”變量”頁簽--》“新增”,輸入變量名"$$FOLDER_NAME"及類型“nstring”
3.創建任務並,使用變量生成文件夾
"任務--》創建",輸入任務名稱,創建,選擇mapping,完成;
雙擊編輯任務--》映射頁簽--》目標表--》屬性欄:勾選create target Directory,Output file directory設置為“$PMTargetFileDir\$$FOLDER_NAME”
4.創建Assignment為變量賦值
拖一個分配(“Assignment”)並雙擊打開--》表達式頁簽--》新增:"$$FOLDER_NAME=to_char(sysdate,'yyyy-mm-dd')"--》應用、確定。
鏈接“啟動”--》“分配”--》“Session”,並啟動工作流。
5.監控工作流並檢查目錄和文件的生成情況。
E:\Informatica\9.6.1\server\infa_shared\TgtFiles\2018-04-05\emp_file1.out

15.5 Local變量
Local變量用於比較相鄰的兩條記錄的某一個字段的值。
如計算相鄰記錄的某個字段的差,或者比較相鄰記錄的某個字段的值是否相等。
例子:
超市需要掌握(同一)客戶到超市采購的時間間隔(即兩次采購的時間差)。
采購表如下:
create table s_order (
o_id number(16) not null primary key,
ac_id number(8) not null,
o_amount number(10,2),
o_date date
);
目標表如下:
create table t_order (
o_id number(16) not null primary key,
ac_id number(8) not null,
o_amount number(10,2),
o_date date,
day_diff number(5)
);
mapping如下:
源表--》SQ--》f(x)--》目標表
SQ內需要改寫sql,按賬戶和日期進行排序:select * from s_order order by ac_id,o_date
f(x)內需要定義變量記錄上次和本次的賬戶和日期,
如果賬戶相同(上次賬戶=本次賬戶),則day_diff賦值為上次日期減本次日期;
如果賬戶不同(上次賬戶!=本次賬戶),則day_diff賦值為0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM