- 在數倉ODS層創建目標表
例:
若源表爲test01
目標表在172.16.0.133/oratest ods_wshh/wshh@2015的格式:
- 創建全量覆蓋工作流
- 在sourcetarget目錄導入工作流所需要的源和目標並保存
01導入源:
02導入目標:
03保存 Ctrl + s
- 打開項目ODS_MOQ文件夾,用拖拽的方式建立源和目標表的快捷方式
01創建源的快捷方式
02創建目標的快捷方式同上;
也可以批量拖入創建快捷方式
- 創建工作流所需要的map
01根據格式創建map名稱
02拖拽組件
03根據需要過濾數據或修改日期
04將字段全部拖入表達式,選擇第一個字段,按shift點最後一個全選所有字段,拖入表達式;
05添加表達式f(x)增加字段ETL_INSERT_TIME、ETL_UPDATE_TIME
06修改新增字段名稱和類型,修改新增加字段的變量值,SESSSTARTTIME是infa系統時間變量;
07選空白處,右鍵點擊自動連接
08保存map;
- 創建可重用的session,並編輯map的源和目標
01在task developer創建可重用session,並重命名
02編輯可重用session,確定源數據庫和owner
03確定目標數據庫和覆蓋目標表的方式
04保存session;
- 創建工作流,並保存
01創建工作流,選擇集成服務
02拖拽可重用session,連接
03保存工作流
- 創建計劃程序
01新建計劃程序
02確定計劃名稱
03確定計劃規則
04保存計劃
05編輯工作流應用計劃
06保存工作流
- 運行工作流並監控
- 創建增量工作流
- 安裝時間戳增量抽取,Treat source rows as更新插入
01創建map:M_T_ODS_FOC_T1
02設置map的變量,變量精度29;
03增加f(x)組件,
04編輯f(x)用於增加字段和設置變量爲 :
SETVARIABLE($$VDATE,TO_CHAR(SESSSTARTTIME,'yyyy/mm/dd hh24:mi:ss'))
05編輯Source qualifier,按時間戳抽取
06自動連接f(x)與目標表,保存map;
07創建session,用Treat source rows as 模式更新插入抽取的數據
08編輯session屬性,Treat source rows as選擇update模式
編輯session的映射,源
編輯session的映射,目標
創建工作流並保存
已經驗證,挺好用
- 安裝時間戳增量抽取,update和lookup更新插入
01創建map:M_T_ODS_FOC_T1_UPDATE
02設置map的變量,變量精度29;
03增加f(x)組件,
04編輯f(x)用於增加字段和設置變量爲 :
SETVARIABLE($$VDATE,TO_CHAR(SESSSTARTTIME,'yyyy/mm/dd hh24:mi:ss'))
05編輯Source qualifier,按時間戳抽取
06添加lookup組件,查詢目標表,編輯端口,選擇目標表主鍵
07將f(x)主鍵端口連接lookup組件,並重命名TID_IN,並編輯lookup關聯條件和cache lookup
08添加update組件,並將lookup和f(x)組件輸出端口連接到update組件
09編輯update組件屬性,確定更新規則
10連接update與目標表,TID_IN與目標主鍵連接,保存map;
07創建session,用Treat source rows as 模式更新插入抽取的數據
08編輯session屬性,Treat source rows as選擇Data driven模式
編輯session的映射,源
編輯session的映射,目標
創建工作流並保存
已經驗證
- 安裝時間戳增量抽取,ETL_INSERT_TIME不變
06添加lookup組件,查詢目標表,編輯端口,選擇目標表主鍵
07將f(x)端口連接lookup組件,並編輯lookup關聯條件和cache lookup
08添加f(x)組件,將lookup組件所用到的端口連接
編輯f(x)ETL_INSERT_TIME字段,確定是否更新,如果tid是空,該行爲插入
08添加update組件,並將f(x)和update組件連接
09編輯update組件屬性,確定更新規則
10連接update與目標表,TID_IN與目標主鍵連接,保存map;
- Infa update機制詳解
Informatica 作爲ETL工具,Update是其很重要的一個特性。也正因爲如此,我們會發現在Informatica工具的很多地方都會有Update的相關設置,許多時候給大家都造成了很大的迷惑,不知道誰先誰後,誰的優先級高,或者具體的作用是什麼,希望能借此文給大家一個清晰的概念。
Informatica 的Update過程簡單說,就是給每條數據設置一個Delete,Insert,Update或者Reject的標誌的過程,我們統稱爲設置更新標誌位的過程,最終調度程序將根據標誌位來進行具體的更新操作執行。以下根據標誌的設置順序進行詳細說明。
1.Init
對於任何一個Mapping的每一條數據, 初始默認標誌爲Insert。即在整個過程中,如果沒有任何更改標誌位的操作,這條數據將作Insert操作。
2.在Mapping中使用了Update Strategy
當在Mapping中使用了Update Strategy時,則根據DD_UPDATE,
DD_INSERT, DD_DELETE等可以將更新標誌位的值由Insert更改爲Update,Insert,Delete等。
3.Treat Source Rows As
在Session屬性設置裏,通過設置Treat Source Rows As 的值,可以再一次對標誌位進行更新,也就是說無論Mapping裏設置了何種更新標誌,在此,又可以進行一次更改。如果選擇了Insert,Update, Delete三種方式,則無論在Mapping中如何修改更新標誌位,在此將統一全部更改爲Insert,Update,Delete。選擇Data Driven時,系統將不對標誌位做任何修改,維持原來的標誌位值。
4.Target Properties
最後一個對更新產生影響的地方,即是Target的屬性設置。
Target load type:(載入模式)
Normal:對於有主鍵或約束的目標表進行逐個載入
bluk:對於沒有主鍵或約束的目標表進行批量載入
session目標表map操作複選框(對於沒有勾選標記的操作,工作流遇到時不做任何操作)
Insert:對於所有被標記爲Insert的數據,進行Insert操作。
Update as Update : 對於所有被標記爲Update的數據,進行Update操作。
Update as Insert: 對於所有被標記爲Update的數據,全部進行Insert操作,不做Update操作。
Update else Insert:對於所有被標記爲Update的數據,先做Update操作,然後對沒有Update成功的數據,再進行Insert操作。
Delete:對於所有被標記爲Delete的數據,進行Delete操作。
Truncate target table option:在插入目標表前先truncate清空目標表。
它的最初默認設置即是圖中所示,Insert, Update as Update, Delete三個選項被選中。這兒就是我們所說的最終調度執行的依據。默認的3個選中選項,表明當Session運行的時候,碰到Insert標誌的,即做Insert操作, 碰到Update標誌的即做Update操作,碰到Delete標誌的就做Delete操作。當然, 我們可以把鉤取消掉,這樣Informatica運行時,碰到相應標誌的數據,將不做任何操作。例如,把Insert的鉤取消掉,那Session運行過程中,將對所有標記爲Insert的數據不做任何操作。
這兒需要特別解釋的便是Update的方式,它具有三種方式可以選擇。在此將對這3種方式,做一個詳細的說明。
首先,需要特別說明的是,這3種方式是互斥的,即同時只能選中一個。
Update as Update : 對於所有被標記爲Update的數據,進行Update操作
Update as Insert: 對於所有被標記爲Update的數據,全部進行Insert操作,不做Update操作
Update else Insert:對於所有被標記爲Update的數據,先做Update操作, 然後對沒有Update成功的數據,再進行Insert操作。
例如:
假設這3條數據在前面所述步驟中被設置爲Update標誌, 而我們的Target Properties設置爲Update Else Insert,此時的Informatica將如何運行呢。
數據1,2,3將首先進行Update操作,而1,2根據主鍵找到了相應的數據進行Update,而3則沒有找到,Update失敗,然後對於3, Informatica將採取Insert方式進行操作,最終結果便是
最後我們可以用一個圖來說明Informatica整個更新的過程:
在初始化時,我們的更新標誌都被默認設爲Insert,而其中第二和第三步都可以對標誌位進行更改,也就是說前面的所有3個步驟就是一個標誌位的設置過程。
最後一步,則是具體的執行操作。根據設置的不同,執行的過程會採取幾種不同的方式執行