1. Informatica中的事務使用方法
在session的設置中,出錯回滾就好了吧。
如果是一個session一個mapping的話都會回滾的,我剛測試了下
還有設置commitinterval這個設置大一點。因為回滾是上一個commit之後的。
2. 為什麼我的informatica執行工作流了 目標表中沒結果
創建源、目標資料庫用戶 /* 創建源資料庫用戶BI_SOURCE */ create user BI_SOURCE identified by password profile DEFAULT; grant dba to BI_SOURCE; create user BI_TARGET identified by "BI_TARGET" profile DEFAULT; grant dba
3. 求助,INFORMATICA中的POST sql 問題
你好,問題細節能否描述具體一點呢?session的日誌裡面如何描述的?
session執行完成之後進行delete操作,但是沒有生效?
你在delete語句後面加上commit,再試一下是否還存在同樣的問題?
4. informatica mapplet組件怎麼使用
1. INFORMATICA CLIENT的使用
1.1 Repository Manager 的使用
1.1.1 創建Repository。
前提:
a. 在ODBC數據源管理器中新建一個數據源連接至你要創建Repository的資料庫(例:jzjxdev)
b. 要在你要連接的資料庫中新建一個用戶(例:name: ETL password: ETL)
現在你可以創建一個Repository了。選擇Repository – Create Repository,輸入Repository Name(例:JZJX),Database Username(例:etl),Database Password(例:etl),ODBC Data Source(例:jzjxdev),Native Connect String(資料庫所在ip例:141.20.52.108)
1.1.2 添加Repository。
通過這一步你可以添加別人已經建好的Repository。
選擇Repository – Add Repository,輸入Repository Name(例:JZJX),Username(例:etl),點擊ok就可以看到名為JZJX的Repository在左邊的瀏覽器中,但是此時還看不到它的內容,要看到它的內容或者對它進行操作必須先連接它。
1.1.3 添加Folder
選擇Folder – Create,輸入文件夾名稱即可。
1.2 Designer 的使用
首先連接Repository,可以看到該Repository在Repository Manager中創建的文件夾。
1.2.1 Sources
Sources文件夾下的表是抽取的來源表。
導入方法:
選擇Tools菜單下的Source Analyzer,然後選擇Sources菜單下的Import from database,連接想要連接的資料庫,連接上後選擇你要抽取的表點擊ok你所選擇的表就會出現在Sources文件夾下。
說明:上面的導入過程導入的只是表結構,你也可以自己創建來源表,只要你創建的表的結構跟真實存在的那張表的表結構一致就行。
1.2.2 Targets
Targets文件夾下的表是抽取的目標表,也就是抽取結果的存放表.
導入方法: 選擇Tools菜單下的Warehouse Designer,然後選擇Targets菜單下的Import from database,連接想要連接的資料庫,連接上後選擇你要抽取的表點擊ok你所選擇的表就會出現在Targets文件夾下。
說明:上面的導入過程導入的只是表結構,你也可以自己創建目標表,只要你創建的表的結構跟真實存在的那張表的表結構一致就行。
1.2.3 Mappings 的設計
選擇Tools菜單下的Mapping Designer才能進行Mapping的設計。
每個Mapping都由來源表,transformation和目標表組成,描述數據抽取的過程。來源表和目標表可以從Sources和Targets文件夾拖拽到工作區,但是transformation一般來說是需要自己創建的。Mapping的設計關鍵是transformation的使用,它的使用關繫到數據抽取的正確性和效率。下面說明各個transformation的作用和用法。
(Active:表示該transformation可以改變通過它的數據的行數;
Passive:表示該transformation不改變通過它的數據的行數;
Connected:表示該transformation要連接到數據流;
Unconnected:表示該transformation可以不連接到數據流)
1.2.3.1 Source Qualifier
作用:根據查詢SQL文從關系表或平坦文件查出所要記錄
用法:創建好Source Qualifier(下簡稱SQ) 後,將需要的用的欄位從來源表拖拽到SQ ,雙擊SQ,對SQ的屬性進行設置。
Select Distinct 屬性:選中的話表明結果記錄將去除重復值;
Tracing Level屬性: 共有四級,表示log的復雜程度;
Number Of Sorted Ports屬性: 排序的欄位個數,值大於0時Sql Query中的sql 文將出現order by 從句;
Sql Filter屬性: 屬性值將出現在Sql Query屬性值的where表達式中;
User Defined Join屬性: 用戶如果要定義外部連接可在此寫(例: {REG_CUSTOMER LEFT OUTER JOIN PURCHASES on
(REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID AND PURCHASES.AMOUNT > 100.00) })
Sql Query屬性:值是一條sql 文,session運行時會執行這條sql 文進行查詢。
命名方式:SQ_Name
類型:Active/Connected
注意:SQ的輸入只能來自來源表; User Defined Join屬性值必須用{}括起來;在更改了SQ的屬性值之後一定要點擊Sql Query屬性的
generate sql按鈕重新生成sql文。
1.2.3.2 Update Strategy
作用:決定該行進行插入,刪除,更新,忽略中的哪一種操作
用法:創建好Update Strategy(下簡稱US)後,將需要的用的欄位從transformation拖拽到US ,雙擊US,對US的屬性進行設置。US的設
置關鍵是Update Strategy Expression屬性的設置,這個表達式使用IIF 或DECODE 函數對記錄的每一行進行判斷,為每一行賦予
DD_INSERT,DD_UPDATE,DD_DELETE,DD_REJECT(這四個是常量,值分別為0,1,2,3)中任意一個值,表明該行在資料庫中將進行
何種操作。
命名方式:UPD_Name
類型:Active/Connected
注意:mapping中有US時,mapping對應的session的在配置屬性時必須把Treat rows屬性設置為Data Driven,否則US將不起作用。
1.2.3.3 Expression
作用:計算一個值
用法:創建好expression_r(下簡稱EXP)後,將需要的用的欄位從來源表拖拽到EXP,雙擊EXP,
新增輸出埠,編輯該埠的表達式。
命名方式:EXP_Name
類型:Passive/Connected
注意:要進行列運算一般用這個transformation; 此種transformation可以使用本地變數
1.2.3.4 Stored Procere
作用:調用一個存儲過程
用法:創建Stored Procere(下簡稱SP)的時候連接資料庫選擇必要的存儲過程。SP有連接和不連接到數據流兩種用法。
連接到數據流方式跟一般的transformation類似,通過拖拽埠來實現數據流。
不連接到數據流分表達式調用和Pre-/Post Session兩種方式。表達式調用方式中SP被Mapping中另一個transformation 中的表達式
調用。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
注意:
1.2.3.5 Sequence Generator
作用:產生主鍵
用法:創建好Sequence Generator(下簡稱SEQ)後,雙擊SEQ,對SEQ的屬性進行設置。Start Value屬性是開始值,此屬性只在選擇了
Cycle選項才有效;Increment By 屬性值是每次增加的值;End Value屬性值是結束值;Current Value屬性值是當前開始值;Cycle選
項被選擇的話NEXTVAL的值達到End Value值之後會重新從Start Value開始;Reset選項被選擇的話,伺服器會為每個使用了該SEQ的
session的NEXTVAL值都從Current Value開始。
命名方式:SEQ_Name
類型:Passive/Connected
注意:這是一個只有兩個輸出埠沒有輸入埠的transformation.;
如果該SEQ時可重復使用的話,不能選擇Reset選項。
1.2.3.6 Aggregator
作用:執行分組聚合運算
用法:創建好Aggregator(下簡稱AGG)後,將需要的用的欄位從其他transformation拖拽到AGG ,雙擊AGG,在埠tab中每個埠有
group by 選項。鉤上想要分組的列,新增埠,編寫聚合表達式實現分組聚合運算。
命名方式:AGG_Name
類型:Active/Connected
注意:可使用本地變數
1.2.3.7 Filter
作用:過濾記錄
用法:創建好Filter(下簡稱FIL)後,將需要的用的欄位從transformation拖拽到FIL ,雙擊FIL,對FIL的屬性進行設置。FIL的配置主
要是對Filter Condition的配置,Filter Condition 寫入類似where條件的表達式即可。
命名方式:FIL_Name
類型:Active/Connected
注意:
1.2.3.8 Lookup
作用:查詢值
用法:創建Lookup(下簡稱KP)的時候選擇要查詢的表。和Stored Procere一樣SP有連接和不連接到數據流兩種用法。
連接到數據流方式將要關聯查詢的欄位從其他的transformation拖拽過來,然後雙擊LKP進行屬性的配置。Lookup Policy On
Multiple Match屬性表明當查詢到多個行時採取取第一行,取第二行,報錯中哪個策略.Lookup Condition 屬性值是查詢的條件。
Lookup Sql Override屬性值是查詢執行的Sql文,我們可以在裡面直接寫Sql。Lookup Caching Enabled屬性表明是否使用緩存,此項
一般選擇為好,有利提高效率。Loopup Cache Persistent屬性表明是否使用永久的緩存。
命名方式:LKP_Name
類型:Passive/Connected or Unconnected
注意:如果Lookup表的類型是來源表的話,請盡量使用Joiner;
一個已連接的LKP不能再被其他transformation的表達式調用;
如果查詢表在session運行過程中不會改變,使用Loopup Cache Persistent屬性可提高性能;
盡量不要在Lookup Sql Override中書寫order by子句,因為cached LKP默認有order by ;
1.2.3.9 Joiner
作用:連接查詢來自不同資料庫的表或平坦文件
用法:創建好Joiner(下簡稱JNR)後,將需要的用的欄位從transformation拖拽到JNR ,雙擊JNR,對JNR的屬性進行設置。用於連接的
兩個表一個稱為detail表,一個稱為master表。JNR屬性中可配置Join Type(連接類型)為Normal Join,Master Outer Join,Detail
Outer Join 和Full Outer Join中任意一種。Normal Join相當於常規的inner join; Master Outer Join相當於常規的Detail left
outer join Master;Detail Outer Join相當於常規的Detail right outer join Master; Full Outer Join相當於常規的full outer
join。Join Condition屬性值就是常規sql文on 後帶的條件。
命名方式:JNR_Name
類型:Active/Connected
注意:盡量使用Normal Join,Master Outer Join.這兩個的效率比另外兩個更好
1.2.3.10 Normalizer
作用:格式化記錄,這些記錄可以是來自COBOL源
用法:
命名方式:NRM_Name
類型:Active/Connected
注意:
1.2.3.11 Router
作用:根據一組表達式將記錄分類路由到多個transformation
用法:創建好Router(下簡稱RTR)後,將需要的用的欄位從transformation拖拽到RTR,雙擊RTR,對RTR的屬性進行設置。在Group tab
中添加組,為每組編輯該組的過濾條件。
命名方式:RTR_Name
類型:Active/Connected
注意:組過濾條件表達式的計算值必須是真或者假。
1.2.3.12 Rank
作用:排序記錄,只輸出最頂層或最低層的n個記錄
用法:創建好Rank(下簡稱RNK)後,將需要的用的欄位從transformation拖拽到RNK,雙擊RNK,對RNK的屬性進行設置。在Ports tab中
有一個名為『R』的列,選擇你要排序的列。你還可以選擇你想分組的列。在Properties tab中Top/Bottom屬性,Top表示選擇頂層的
記錄,Bottom表示選擇底層的記錄; Number Of Ranks屬性值是整數,表示要選擇的記錄條數。假設你在『R』列中選擇了名為』
Price』的列,而且Group By選擇了『Name』列,Top/Bottom屬性選擇的是『Top』, Number Of Ranks屬性值是2,那麼將抽取過程是
這樣的:以name分組取出每組中 Price最大的2列記錄。
命名方式:RNK_Name
類型:Active/Connected
注意:可以使用本地變數
1.2.3.13 ERP Source Qualifier
作用:根據查詢SQL文從ERP文件查出所要記錄
用法:
命名方式:
類型:Active/Connected
注意:
1.2.3.14 XML Source Qualifier
作用:根據查詢SQL文從XML文件查出所要記錄
用法:
命名方式:XSQ_Name
類型:Passive/Connected
注意:
1.2.4 Mapping Parameters(參數) 和 Variables(變數)的使用
如果你在一個mapping中多次用到同一個值,又或者mapping中要用到一個在session運行才能決定的值,這時候可以使用mapping
parameters或variable。添加參數或變數的方法是:選擇Mappings-Parameters and Variables,在窗口新增變數或者參數,並對它的
數據類型,數據大小,初始值進行設置。添加的參數和變數在本mapping的transformation的表達式中就可以使用了。這些參數和變
量的值還可以設置在.txt文件中,建session或者batch的時候把這個文件的路徑設置在Parameter輸入框中就行了。
Mapping參數變數的命名方式:$$NAME
存放參數變數的.txt文件的格式:folder_name可寫可不寫
[folder_name.session_name]
parameter_name=value
variable_name=value
mapplet_name.parameter_name=value
[folder_name.session2_name]
parameter_name=value
variable_name=value
mapplet_name.variable_name=value
[folder2_name.session_name]
parameter_name=value
variable_name=value
mapplet_name.parameter_name=value
1.2.5 Mapping 的調試
選擇Mappings–Debugger–Start Debugger,在點擊『下一步』的過程中選擇調試過程運行在哪台伺服器然後為來源表選擇資料庫,
最後到完成。等調試初始化好之後點擊Mappings–Debugger–Continue(或按F5),即可開始調試,選擇某個目標表即可看該表的結果
數據。如果還想看中間某個transformation的數據,在開始調試前為該transformation增加一個斷點。
1.3 Server Manager 的使用
1.3.1 Register Server(注冊伺服器)
任何session都必須運行在某個伺服器上,所以如果Server Manager里沒有伺服器的話必須注冊一個,當然你也可注冊多個伺服器。
伺服器的注冊過程如下:
選擇Server Configuration – Register Server,Server輸入 的是要注冊的伺服器的名稱;Host Name 輸入的是運行了informatica
server的機器名或iprotocol選擇TCP/IPort Number輸入4001。最下面的是伺服器的變數設置,設置的是session或batch運行時一些
文件的存放位置,比如說log文件bad 文件 cache文件,一般不用更改。這樣一個伺服器就注冊到repository了,不過後面你可以雙
擊它重新編輯。
1.3.2 Add DataBase Connection(添加資料庫連接)
選擇Server Configuration – DataBase Connection,點擊Add,然後選擇資料庫的類型。不同類型的資料庫配置起來不一定一樣,下面說明Oracle 和SQL Server兩種資料庫連接的配置。
Oracle類型資料庫連接配置:Data Source 輸入數據源名稱;User Name輸入資料庫連接的用戶名;Password輸入資料庫連接的密碼;Connect String 輸入Oracle TNS 服務名。
SQL Server 類型資料庫連接配置: Data Source 輸入數據源名稱;User Name輸入資料庫連接的用戶名;Password輸入資料庫連接的密碼;Database Name輸入資料庫名稱;Server Name輸入資料庫的ip地址;Domain Name輸入資料庫的域名。
1.3.3 Add Session(添加抽取任務)
Mapping 只是數據抽取過程的設計,要使這個過程運行必須為該Mapping建立對應的session,然後運行該session。選擇Operations-Add Session,在窗口中選擇一個Mapping點擊ok會出現編輯該session的窗口。
Session輸入框輸入該session的名稱;
server選擇該session將運行在的伺服器;
Treat rows有Insert,Delete,Update,Data Driven四個選項,表明抽取出來的數據在目標表中作何種操作,只有在session對應的mapping中有Update Stategy時才能選擇Data Driven而且也必須選擇Data Driven;
Source 框選擇來源表所在的資料庫;
Target Options 中的Insert,Update(as Update),Update(as Insert),Update(else Insert),Delete,Truncate table 選項的意思分別是:將insert作insert操作,將Update 作insert操作,將Update先做Update操作不成功再作insert操作,將delete作delete操作,在對目標表操作前刪除目標表所有數據。這些選項如果與Update Stategy沖突server將以這里的設置為准,也就是說這里的設置可以覆蓋Update Stategy的設置;Parameter輸入框中輸入session要用到的參數或變數的所在文件的路徑;其他設置比較簡單或者保持原來的值即可,這里就不再詳細說明了。除了在添加 session的過程中可編輯session之外,雙擊已添加的session也對session重新設置。
註:如果mapping 中有Joiner的話,session的編輯窗口的Source Type就變成heterogeneous(不同類),這樣就無法通過設置Source
來設置來源表的位置,只能在Source Location tab中為每個來源表設置位置。
1.3.4 Add Batch(添加批操作任務)
添加Batch可以將一系列的session串起來,這樣就可以讓必須按順序執行的session有序的執行。添加方法:選擇Operations-Add Batch,在窗口中對batch進行編輯。Batch輸入框中輸入batch 的名稱;
Parameter輸入框中輸入batch中的session要用到的參數或變數的所在文件的路徑,由於每個session都可以設置自己的parameter,所以batch中可以不設置,即使batch的parameter進行了設置也會被各個session自己的parameter設置所覆蓋,但如果session用到了parameter在同一個文件中的話,把parameter文件的位置設置在batch的parameter輸入框就顯得更方便;Enabled選項表明是否讓該batch有效;Concurrent選項表明是否讓batch中的所有session並行地運行;Schele中可設置batch的運行時間和運行頻率。
1.3.5 Session和Batch 的運行
右鍵單擊要運行的session或者batch,選擇start即可讓該session或者batch立刻運行。如果你的session或者batch的Schele設置不是選擇的『Run only on demand』,那麼該session或者batch就會在設置完後就處在Scheled狀態,時間一到就會自動運行。(可以右擊伺服器選擇monitor來監視運行在該伺服器下的session或者batch當前狀態)。
5. Informatica怎麼執行SQL腳本
需要將它放到windows腳本 bat裡面執行,嘗試以以下方式保存為.bat
a.bat:
psql.bat -h localhost -p 5432 postgres "postgres" UTF8;
--sql命令跟後面
6. 用SQL腳本寫ETL
學好SQL就行了,DML/DDL. ETL可以用很多工具來實現,比如Shell, Perl, Informatica, Ab Initio等等, SQL本身的邏輯和處理工作就是ETL的過程. 如果是用SQL來實現ETL調度管理,可以先創建資料庫表,然後,通過SQL實現Insert/Update/Delete來控制ETL腳本的被調度。
7. 為什麼要用etl工具自己手動寫腳本然後運行不是也可以么
成品ETL工具與手工寫腳本之比較:
一、靈活性來講:ETL工具比較靈活,需要在此平台上設置規則定義,前期是需要工具先前必須已有支持功能,如果需要擴展,要ETL工具源廠商開發。而自己寫腳本只需先前好好調研需求,自己寫能實現的功能即可。俗話說得好「求人不如求己」哈哈哈!
二、難易度:ETL工具相對上手比較容易,工程師只需具備兩個必要條件:1 、對資料庫熟悉 2、對客戶的業務邏輯了解。手動寫腳本呢?不僅要具備操作ETL工具的條件,還要必須有一定技術水平。
三、後期管理與維護:ETL工具非常容易,這點上是用工具的最給力的優勢。可能也是ETL工具誕生的緣由吧!原因:人力少不說,如有新的需求,只需稍加改動,圖形配置定義即可。而手工編碼呢?較難。需要重又開發寫程序,隨著數據信息的日積月累,每日數據的遞增,更新。開發的速度趕不上需求的更新,嚴重到先前開發架構不合理甚至於有可能推倒重來的風險。如果取中間,既有圖形配置有兼具腳本開發功能,有款中國的Beeload/ BeeDI
四、性能和效率:這方面取決於多方面如:1、硬體:伺服器 CPU 內存 2、資料庫類型 數據類型 3、網路狀況 4 、ETL 工具的配置 設計。。。。。整體來說 工具屬於較高范疇,各家成熟ETL 不一致、各有千秋。手工寫腳本就要看編程者的水平啦!因人而異,如果直接在資料庫上寫存儲過興許比任何一家成品工具高得多。在性能上,工具當屬老美的informatica IBM 的DS
五、開發周期:工具只需操作上源廠商負責培訓,再把客戶目前需求了解透徹,周期很短,上線見效快。手工編碼不僅需要把客戶(當前)需求了解透徹,未來需求也要有所預測,再進行開發。這樣周期就不得而知了。
六、工作量:從上述些顯然保守點得出:ETL工具屬中等,手工編碼屬較重。寫好程序還需大量測試工具,不斷修正BUG 與完善。成熟工具已把這些工具先前做過了,即使有,也是可以容忍個別,源廠商可以分擔修正。
七、投入成本價格:ETL工具前期成本投入較多,鈔票先付。後期維護成本相對低。編寫腳本,先期投入人力(工程師的工薪)中期大量測試人力,後期維護人力(工程師的工薪)看似相對較低。貌似不要票子的開源滴ETL工具 Kettle,後期才付費(服務費與培訓費)
總之不管是用工具還是自己寫腳本,要全盤考慮,根據各自項目大小,成本,願意付出哪部分,適合的才是最佳滴!
8. 用informatica調用存儲過程的時候,如何傳入輸入參數(如:201401)
你用stored procere transformation 引入資料庫中的存儲過程,系統會生成input port,你將要傳入的埠連到這個埠就可以輸入參數
9. 如何讓informatica實現動態抽取表
除非你想在command里調腳本。
工具和手工編碼最大的特點,除了可視化外,還有就是方便管理,特別PC方便元數據管理,如果連表的信息都沒在designer里,工具的作用就失去一半了。
如果是簡單的抽取,也可以將多個表放入一個mapping,不過表的數量不能太多。
BTW,將表名放入參數文件的用法,以前還沒聽說過,不過廠商的人提到過,可能能將表名參數化,但極少這么使用,資深人士也不太清楚如何用。