Informatica 初學日記全


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 Procedure
作用:調用一個存儲過程
用法:創建Stored Procedure(下簡稱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 Procedure一樣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並行地運行;Schedule中可設置batch的運行時間和運行頻率。


1.3.5 Session和Batch 的運行
右鍵單擊要運行的session或者batch,選擇start即可讓該session或者batch立刻運行。如果你的session或者batch的Schedule設置不是選擇的‘Run only on demand’,那么該session或者batch就會在設置完后就處在Scheduled狀態,時間一到就會自動運行。(可以右擊服務器選擇monitor來監視運行在該服務器下的session或者batch當前狀態)。

 


Informatica學習筆記1:UPDATE AS INSERT


問:
要求實現每天抽取數據,而且是如果有改變才抽取更新,沒有就不更新,
因為源表中有最后修改時間的字段,我讓它 和SESSION上次運行時間比較來解決是否抽取,
但問題是有的表中沒有主鍵,我該怎么實現更新呢 ?
有主鍵的我在WORKFLOW的MAPPING里面勾上了UPDATE ELSE INSERT
那沒主鍵的用 UPDATE AS INSERT 行么?
還有UPDATE AS INSERT 什么意思啊,能解釋的形象點么?


答:
UPDATE AS INSERT 就是
語句一: update tab_name set c1= value1 ,c2 = value2 where c_prikey = value_pri
語句二: insert into tab_name values(******)
當在 tab_name的c_prikey找到有等於value_pri的,就執行語句一把所有對應的記錄update。
當沒有匹配的,就執行語句二。
你可以powercenter的 source defination中的自己定義主鍵,也可以直接 override update sql,
可以不用理會真實表結構中是否有主鍵
Informatica學習筆記2:客戶端連接服務器


問:
我通過客戶端連接到服務器,做了一個workflow,運行的時候出現錯誤,說是服務器連接不上
repository server和infomatic server他倆的port是不是要一樣還是不需要?


答:
看看server 的配置..我想可能是沒有配置好.


問:
Repository server服務起來了,就是informatica server起不來了,在配置的時候,是informatica server的ip解析不出來,怎么才能把那個地址和主機對應起來


答:
1.直接寫IP
2.編輯客戶端的%WINDOWS%/SYSTEM32/DRIVERS/ETC/HOSTS文件,把ip與名字的對應關系加進去,客戶端這台機器就可以自己解析了
3.找DNS或者什么解析服務器搞定。


問:
informatica server裝在unix操作系統下,能不能找到配置informatica server的配置文件對應的是那一個文件.


答:
unix下缺省是pmserver.cfg,可以用pmconfig這個命令行工具修改配置文件,也可以直接打開編輯。
如果不是缺省的配置文件名可以通過, ps -efl|grep pmserver看看是哪個文件名。


問:
謝謝,pmserver.cfg這個文件中的配置信息我看過了,里面設置的都是repository server ip:192.168.0.1和port:6001,怎么找不到配
置的informatica server的ip:192.168.0.1和port:4001我是想知道這個信息在配置文件中能找到嗎?


答:
這個是在workflow manager里面注冊的。雙擊server名字就看得到了。


問:
是的,我在workflow manager里看到過,只要在那里注冊好了就行了嗎,我想它應該存放在什么位置
所以想搞清楚,還是謝謝你.


答:
他存放在策略庫的opb_server_info表里面,呵呵。你也可以試試看直接改數據庫。
不過直接改數據庫這種事情要悄悄的干,被david知道了要打pp的。

 


Informatica學習筆記3:workflow問題


問:
創建一個工作流從一個txt文件到目標表,是不是要定義.par參數文件 有沒有誰有這方面的資料教程,給我發一份,非常感謝!~
我創建了一個,運行的時候出錯了:(Server10) Start workflow: Request acknowledged
(Server10) Start workflow: ERROR: Error in starting execution of workflow [id = 8] [wf_s_m_test]. Please check the server log for more information.


答:
沒必要非得定義參數文件,直接在session 中,指定路徑和文件名就行..如果是同結構批量的文件,可以用file list 功能..
參數文件也能作,相對來說是在外部控制路徑和文件名,比較動態了.
那個錯,不是讓你去看 server log 嗎.. 去看看了.
window 平台,default 去看事件管理器
Informatica學習筆記4:Folder權限的問題


問:
Informatica用不同的用戶創建的不同的folder,互相看不見是什么原因那?


答:
保護機制的作用,建folder的時候,在安全選項里可以設置!~
把read權限賦給 repository user就可以了
也有可能是啟用了 version control 的原因
Informatica學習筆記5:建立Repositories的時候出錯


問:
我的Infromatica是安裝在英文版的Windows環境下的,Matadata要放在Oracle9i中,可是當我在建立Repository的時候怎么也連接不
上我的Oracle9i數據庫,而我用其他方式連接數據庫是暢通的,在Windows的事件查看中看到如下信息:
(368|752) Failure in running command-line request type[100401] [pmrepagent create -r "TCS" -t "Oracle" -u informatica -c Oradb -d "MS1252" -h tcs-china.db -o 9999 -H "tcs-china.db" -O 5001 -K 2082340862]. Error is [An error occurred while creating the repository.].


答:
建repository在"Repository Server Administration Console"里面可以找到Active Log的,可以看看出錯信息,出錯多的好像都是插入一個LONG的值,通常建策略庫出問題都是字符集搗的鬼,幾個地方要注意數據庫的字符集,系統NLS_LANG環境變量,操作系統的缺省字符集(windows在地區設置里面看,還有缺省輸入法也可能影響),理論上不同的字符集只要是可轉換的,都是可以的,不過弄成一樣的比較簡單了。


問:
謝謝guruhao的提示和幫助,我決定將Oracle和Informatica重新安裝一下再來測試一次,我的操作系統的缺省字符集(windows在地區設置里面)是china系統NLS_LANG環境變量是N/A


答:
這一段都是正常的,drop table不成功,屬於建庫之前清理表的動作,還要往后,大約在中間的位置。有個真正的插入數據的錯,你最好設置一下NLS_LANG使之與oracle server的字符集相匹配。
it should be Oracle characterset is not same in Oracle Server and client.


Informatica學習筆記6:建立workflow的問題


問:
我用powercenter8建立一個mapping后,在workflow manager中建立了workflow,但是運行這個workflow時卻提示以下錯誤信息:Could not start execution of this workflow because the current run on this Integration Service has not completed yet我檢查了一下:server中的各服務已經正常啟動了,但是就是運行時出現這種情況,請問是什么原因導致的??以及怎樣解決呢???各位知道的就請說一下吧。


答:
該錯誤應該是說你建的這個workflow正在運行,且還沒有結束,因而你不可以再次啟動該工作流。你可以通過Monitor觀察一下。


問:
該錯誤應該是說你建的這個workflow正在運行,且還沒有結束,因而你不可以再次啟動該工作流。你可以通過Monitor觀察一下。
但是我在monitor中又看不到任何的session在運行啊~


答:
將你的informatica server在service里重新啟動后再運行看看(問:過一陣子之后再運行就正常了。不知道為什么?怪怪的~~~)


Informatica學習筆記7:workflow執行報錯


問:
我在執行某個workflow 的時候報了如下錯誤:
FATAL ERROR : Unexpected Condition in file[/u05/bld65_64/pm713n/server/dmapper/widget/wjoiner.cpp] line [3176].
Contact Informatica Technical Support for assistance. Aborting this DTM process due to an unexpected condition.
請問各位這是什么原因?我看了一下日志文件,好像是初始化的過程都還沒有結束就報錯了。


答:
This error occurs when the Joiner transformation in the mapping has become corrupted.
To resolve this do one of the following:
1. Delete and re-create the Joiner transformation.
2. Export and import the mapping replacing the mapping when importing it.
謝謝!!找到原因了,原來是某一個字段的連接線沒有連上導致的錯誤。可是我有個疑問,為什么有的控件出現這種情況的時候就沒
有問題呢??


Informatica學習筆記8:提示joiner輸入字段沒有排序


問:
我們這里是異地開發,從北京拿過來的mapping,在那里都可以跑通,而且沒有任何問題,但是怎么拿到我這里就提示joiner輸入字
段沒有排序呢?問題可能發生在什么地方呢?


答:
你的join 控件應該是來自同一個數據源的,你在join 控件前增加一個Sorter 控件,將join 的輸入數據源排序。
Informatica學習筆記9:import一系列mapping


問:
求教,要import一系列mapping,但是codepage不一致,應該怎么調整?


答:
codepage 不一致,一定得改..反正一個XML,只需要改兩個地方..如果XML很多,寫一個小程序,會方便點..如果少,手工改一下就好了.
一系列的xml?? 是指很多,是嗎?
1.建議你在導出時,用rep manager, 將很多對象打一個包導出.
2.pmrep 命令行,有個object import 功能,寫一個批量的 .bat 導了
Informatica學習筆記10:復制數據庫的問題


問:
請教各位大俠:我要用PowerCenter復制一個數據庫,源庫是一個SQL Server的數據庫,目標庫是DB2數據庫,請問怎么做?


答:
一個表一個表的做。
如果想一次復制所有表,干脆用SQL server的DTS好了。
如果是整個庫的話,不如用DB import/export了..ETL強調的是T..


Informatica學習筆記11:informatica services不能啟動


問:
環境:
在一台機器上安裝了informatica services+client+oracle 10g(作為repository)。informatica的版本是8.1.1,啟動
informatica services時沒有錯誤,但是過幾分鍾就停了。日志信息catalina.out如下:
2006-11-28 16:12:46 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-6001
2006-11-28 16:12:46 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1234 ms
2006-11-28 16:12:46 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2006-11-28 16:12:46 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.0
2006-11-28 16:12:46 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
2006-11-28 16:12:47 org.apache.catalina.core.StandardHost getDeployer
信息: Create Host deployer for direct deployment ( non-jmx )
2006-11-28 16:12:47 org.apache.catalina.core.StandardHostDeployer install
信息: Processing Context configuration file URL file:c:\Informatica\PowerCenter8.1.1
\server\tomcat\conf\Catalina\localhost\adminconsole.xml
java.lang.UnsatisfiedLinkError: D:\Informatica\PowerCenter8.1.1\server\bin\pmjrepn.dll: ???????¨????ò??
前幾天一直運行正常,請問各位高手,該問題如何解決,謝謝!


答:
This error will occur when there is there is an incompatible xerces-c_2_4_0.dll file on the Windows machine.
To resolve this do the following:
Stop the Informatica Services Windows service.
Go to the C:\WINNT\system32 directory.
Rename the xerces-c_2_4_0.dll file to xerces-c_2_4_0.old.dll.
Copy the xerces-c_2_4_0.dll file in the<INFA_HOME>\server\bin directory to the C:\WINNT\system32 directory.
<INFA_HOME> is the Informatica installation directory.
Re-start the Informatica Services Windows service.
Try it again, please let me know the result.


Informatica學習筆記12:從mysql抽取數據的字符集問題


問:
我們的source數據庫是mysql,字符集是utf8. 現在要用informatica從中抽取數據並生成文本,用於下一步的ETL處理。informatica server的code page是ISO 8859-1. 結果中文字符總是抽取不成功。請問如何處理才能正確抽取中文字符?


答:
informatica server的code page是ISO 8859-1 ,你得改成UNICODE的模式,才可以比較適合作轉換..你在workflow manager中的那個ODBC的連接,應該也有codepage的設置吧..改改試試..


問:
informatica server的code page是ISO 8859-1 ,你得改成UNICODE的模式,才可以比較適合作轉換..你在workflow manager中的那個ODBC的連接,應該也有codepage的設置吧..改改試試..
謝謝斑竹。
問題是我沒辦法去改informatica server的配置。如果就用當前配置,有可能做到正確抽取中文么?能夠做一些編碼的轉換來實現么?


答:
亂碼,就找幾個點的碼制設定了..
源就那樣了, ETL服務器上配的ODBC,可能會有codepage 相關; 再就是ETL 服務器, 你已設為ISO 8859-1,如果不對中文數據作轉換,應該不會亂; workflow manager中,配置ODBC我忘了是不是也有code page 設定了..就這么幾塊..你分開檢查一下了.你用個什么工具,通過系統ODBC去訪問一下,如果看到的不是亂碼,再從后面幾點排這個錯了..(修改了連接mysql的odbc,加上 stmt=SET NAMES 'utf8' 就好了,謝謝斑竹!)


Informatica學習筆記13:沒有Lincense導致的問題


問:
各位兄弟們幫忙看一下,informatica的問題,我使用的是6版本,目標數據庫是oracle 10g,在安裝好,配置好的時候,執行workflow的時候報這樣的錯誤
CMN_1022 Database driver error...CMN_1022 [
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Database driver error...
Function Name : Connect
Database driver error...
Function Name : Connect
Database Error: Failed to connect to database using user [test_loc] and connection string [192.168.1.42].]


答:
你用的是ODBC..是UNIX下,還是window?
為什么不用Oracle native driver?這個看起來,像是你在系統建的ODBC,沒有找到..
你在系統的ODBC,建立一個連接,例如: odbc_ora_hr,測試一下,看是不是能連接到遠程的oracle server.
你在workflow manager中,建立ODBC時,那個connectstring 寫上這個名字.odbc_ora_hr如果在系統的ODBC是通的,應該就可以了吧.


問:
ODBC用的是informatica自帶的odbc安裝的,用的是window的,我也想用oracle 的驅動,但是我沒有oracle 的Lincense key,我只有odbc的所以只能用odbc的了,系統odbc配置的圖和workflow manager中配置odbc的圖和你說的一樣,配置好后,報的錯誤還是一樣的,急死了


答:
問題解決了,是key有問題!
艾!沒有informatica的Lincense

 

Informatica學習筆記14:lookup中自定義sql有問題


powercenter 7.1 windows平台
source table w_test_fs
target table w_test_f
源表和目標表中都有字段col1和col2,這兩個字段可以看作是聯合主鍵吧 建了個unique index
mapping流程大概說一下


1.從源表取數據 select fs.col1,fs.col2,fs.**,... from w_test_fs fs


2.建lookup(從w_test_f),in的字段就是上面select出來的col1和col2,比較字段是w_test_f中的col1和col2,取出w_test_f中的主鍵select f.row_id,f.col1,f.col2 from w_test_f f, w_test_fs fs where f.col1=fs.col1 and f.col2=fs.col2


3.建filter, 把lookup找出的lookup_row_id和步驟1選出的字段傳給此filter
filter條件是isnull(lookup_row_id)


4.進入目標表
現在的問題是:
源表和目標表數據條數是一樣多了(之前跑過,那時目標表是空的) 就是說對於col1和col2來說,兩個表是一樣的用sql可以驗證 select fs.* from w_test_fs fs where (select f.row_id from w_test_f f where f.col1=fs.col1 and f.col2 = fs.col2) is null;


執行這條sql查出0條記錄
但我運行上面的mapping 還是有數據流過filter,遇到過有部分數據流過(filter起了部分作用)、也遇到過數據全部流過(filter沒起作用) 當然對應的mapping是不一樣的,我上面的mapping只是個例子 規則是一樣的
請問大家遇到過或者有什么建議沒有?


答:
已找到部分原因,lookup中自定義sql有問題
Informatica學習筆記15:infopower如何實現增量抽取?


問:
在 informatica powercenter中如何實現增量抽取?我想了一下使用時間戳,但是這個時間戳如何去使用不是很明白,希望各位高人在這邊能指點一下,如果有例子更好,在這里先謝謝了!


答:
有時間戳就直接用唄,總有個辦法記錄上次抽取的時間的,也有辦法設置本次的截止日期,然后 where timestamp > last_time and timestamp <= current_time,有時間戳的系統和工具沒啥大的關系
問:那在參數中如何去調用呢?


答:
這個你看看mapping 的參數和變量那塊吧.. help 當中有詳細寫..你這樣問,太大,誰也很難花時間去詳細寫的.
關於增量抽取的問題,我在help里看到了以下內容:Use the following filter to incrementally extract data based on the SALES.sales_datetime column in the source: SALES.sales_datetime > TO_DATE (`

LastUpdateDateTime)ANDSALES.salesdatetime<TODATE(LastUpdateDateTime′)ANDSALES.salesdatetime<TODATE(‘

$SessStartTime')

 


小聲的問下:這個時間戳的時間一定要是來自源表中某個字段值嗎?如果源表中沒有這樣的時間字段,怎么辦?


1.從源中找到變化和增量標識(可能是時間字段或一些業務字段,標識位之類的),這樣比較容易作.


2.現在有一些工具是可以從DB的log層面解析變化數據的,這樣,就可以不用這樣考慮了.


3.從DB的功能角度去想辦法,找到增量或變化數據的方法,像oracle 有物化視圖.


4.還有一些建數據庫觸發器或全表比對..


5. EAI..


還有一些方法吧,但多半用上面幾種吧.
1保證要做的數據源中有標示更新的時間戳和標示邏輯刪除的字段!
2在mapping設計中設置mapping變量,用來記錄每次執行etl過程時的數據庫時間(注意是源系統的數據庫時間)
3記得更新mapping變量~其余的就不用說了
呵呵,向SuperGlue轉行中!


Informatica學習筆記16:informatica 8.1 安裝問題


問:
大家好,請教一個問題, 安裝8.1時 每次安裝到 connecting to repository service 時,總是過不去,連接不上, 報cannot connect to repository service, 彈出一個窗口,列出了一些信息,然后有2個選項, 重試 和 忽略.
彈出的信息如下:
The installer created the Repository Service, but could not enable it. Use the Administration Console at http://smu-o7542xepp54:6001/adminconsole to correct the error and enable the service. You can get more information in the Repository Service logs in the Administration Console Log Viewer. Select Ignore to continue with the installation and enable the Repository Service after installation.STDOUT:......
請教大家,為什么連接不上RESPOSITORY SERVCIE啊, 2個數據庫連接測試都是 測試通過.


答:
和db 操作一樣, 可以connect 只是前提保證,在執行大的SQL時,因為權限,網絡,字符集不統一或大SQL的原因,極有可能會失敗.
你先描述一下,你所有DB是啥吧..不同數據庫,反應是不同的.


問:
SQL SERVER 2000開發版+SP4+WINXP SP2 和 SQL SERVER 2005+sp1+ win2003 server+sp1 楊曉東說推薦用ORACLE , 但之前我們在sqlserver2000和2005上都安裝成功了,現在安裝總是在上面的步驟通過不了,連接不上.
建2個數據庫,2個用戶,連repository庫時,我干脆用sa登陸,都連接不上repository services.
網絡方面,我是服務器,客戶端都裝在我的本上,都是本機字符集方面, 我拿到的8.1是中文版的,操作系統也是中文版的. 之前用7的時候是英文版,那時候OS裝的也是英文的,都是統一的.


答:
你先登錄到 http://smu-o7542xepp54:6001/adminconsole
user: admin
password 用你設定的那個, 進到console 頁面,點擊repository 圖標,右面會顯示一些紅色的錯誤信息,你再看看log 那個tab 頁上,會有詳細的錯誤信息. 那里的信息,會比較細.
這肯定是DB在執行SQL時,報的錯。。。是不是和網絡的firewall 有關系? 以前SQL SERVER出問題,多半都是網絡,firewall 和SQL SERVER的設置上。
我曾在SQL SERVER上安裝過pwc8.x,是沒有問題的。 你找到那些詳細信息,如果還不行,把信息貼出來。
我前幾天也裝過知識庫用SQL Server2000的,好象沒什么問題,不過就是覺得在建知識庫那的connectstring要用:主機名@數據庫名這點不知道樓主注意到沒有,這個環境下還沒有碰到過其他問題,還有一個數據庫只能對應一個知識庫的,如果之前在某一數據庫上建過知識庫,那么第二次再在此數據庫上建知識庫也是無效的.因此,
建domain的數據庫和建知識庫的數據庫最好分開,要建知識庫的數據庫最好是空庫,至少也是不能有存放知識庫的元數據.如果domain和知識庫裝在同一數據庫中,那么只清除知識庫的元數據而不清除domain信息,直接在數據庫里頭不太好清,最好是在控制台中對知識庫用delete content然后刪除知識庫.


我講的可能不是樓主的問題的解決方法.僅僅和大家分享一下小經驗.


問:
在虛擬機上終於搞定, WIN2003SP1+SQLSERVER2005SP1. 安裝過程和以前一樣,為什么在虛擬機上就成功安裝呢, 之前安裝成功也是在虛擬機上, 另一個同事也是在虛擬機上安裝成功的. 感謝樓上的各位.
請大家分析一下為什么虛擬機上成功安裝,而實體機卻安裝時報連接不上,而導致安裝不成功呢?


Informatica學習筆記17:如何在PowerCenter中實現累加SUM


問:
我最近在設計一個mapping時,遇到一個問題:這個mapping要做的是,聚合(SUM)源表(BUSI_T_ENTRY)中的借方金額(DEBITAMOUNT)字段值,groupby的字段是源表中的年(ACCOUNTYEAR),月(ACCOUNTMONTH),地
區(AREA_CODE)三個字段。但是在做SUM的時候,是要做一個累進的SUM,比如說:當做2006年3月的SUM值時,2006年3月的SUM值是等於2006年1,2,3月的合計值。
我現在的做法是先在Aggregator中按年,月,地區分別做好當年每個月的SUM值,然后再到下一個Expression中根據月(ACCOUNTMONTH)來做累加(比如,當月等於3時,我就把1,2,3月的SUM值加起來做為3月的聚合值),可是我這樣做的時候,出來的結果,總是累加不起來,3月值仍然等於3月的當月SUM值。
請教各路大俠怎樣做可以實現我的需求?或是我的做法有什么問題,需要怎么來改進?


答:
先將結果集排序..然后,你看看 cume 函數..應該可以作.
用cume好像不解決問題呀,這個只按月累加的,不同地區和年要清零的。cume只能一直累加下去,可以用local variables,可以保留上一條的信息
設置三個變量,PRE_AREA,PRE_YEAR,CUME_VALUE,其中CUME_VALUE差不多是這個樣子,
IIF(ACCOUNTAREA = PRE_AREA AND ACCOUNTYEAR = PRE_YEAR, CUME_VALUE + AMOUNT, AMOUNT )
當然要注意按地區,年,月先排序。具體可以參照隨機文檔里面的Using Local Variables ->Store Values Across Rows。
想了想,在aggregator里面用cume遇到不同的group by條件后,應該是可以自動清0的,所以還是用cume簡單些。
我覺得 cume 能實現, 實在不行,一次只處理一年的(這樣考慮的東西少,最簡單),用參數控制一下where子句..實在不行,可以考慮,將
地區,年,月,合成一個字段..這個咋都能作..
能作的方法有多種..但我覺得這種最簡單.


問:
我現在目前就是只處理一年的,上午我試了下,用cume是可以的做的,但是以后肯定是不止一年的數據。
還有David說:”把地區,年,月合成一個字段,這咋都能作“,我有點不理解,能具體一點點嗎?


答:
字符串與呀..
我覺得還是一年一年處理比較好..
你可以作一個session,用參數來控制where 子句,每次作一年的...你用外部一個程序控制改變這個參數,並多次執行(pmcmd )..這樣比較簡單..
我知道把地區,年,月合成一個字段是字符串與,我的意思是說:把地區,年,月合成一個字段后,在我做累積SUM的時候怎么來用,為什么這樣就可以”咋都能作“了?
不好意思,剛剛沒講清楚。informatica <wbr>學習日記整理(轉)
再用cume 呀.


Informatica學習筆記18:PC8.1運行出錯


問:
:confused:
版本PC8.1
用了一個最簡單的例子,就源和目標的一個一一映射。應該說不會是流程的問題和參數設置問題。
運行后錯誤日志如下:
Message: *********** FATAL ERROR : Unexpected Condition in file
[\ZeusbuilderProduction\view\powrmart\common\odl\oracle8\oradriver.cpp] line [241]. Contact Informatica Technical
Support for assistance. Aborting this DTM process due to an unexpected condition. ***********
懷疑是不是PC8.1文件被破壞了,請各位高手指點一下可能會是什么問題??


答:
你的這個問題,不是找到原因了嗎..減小sorter 的cache 或增大 swap space..
看着像是ODBC方面的問題。
兩個建議:
1.重啟機器,試一下。有時安裝完,沒有重啟,有些變量沒有生效,會報這類問題。
2. 請用 DataDirect ODBC,重新導入源和目標結構,再作一個簡單的例子,試一下。


問:
建議:
1,我的PC8已經安裝很久了(不過lisence還沒過期,改過系統時間啦),所以呢機器已經重起很多次啦,應該不是這個問題


2,源和目標也重新導過,一樣報錯,另外我不管哪個task都是報這一樣的錯,所以應該不是某個組件的參數設置不合理(最后一次做的一個mapping根本就沒有用到轉換組件);
還有一點,我現在用的是PC8.1.0版本,但之前在這個知識庫里還原進來的是PC8.1.1的.rep文件,所以我懷疑是不是版本不兼容,但是今天我又把PC8.1.1的知識庫刪了(只是把知識庫及其內容刪了,沒將存放知識庫的oracle用戶刪了重建),然后又創建了個PC8.1.0的新知識庫,在這個平台下又做了mapping,運行后還是報一樣的錯。。。
你說的ODBC的問題我也想過,但不知道怎么來檢查,因為錯誤信息里的那個路徑我還沒找到。。希望指點一下


答:
你是按我說的用 datadirect ODBC建立一個ODBC,再用designer導入源,目標,作一個簡單的mapping。。在workflow manager 中,你可建立基於oracle native driver的連接。這個問題,就是ODBC的driver 不對。。要用 DataDirect 的那個
問題解決了。。。
原因是我導表結構時,使用的oracle提供的ODBC去導的。。driver是Oracle in OraHome92
這次我換了PC8提供的ODBC去導就好了,driver是DataDirect CLOSED ODBC 5.1 oracle wire protocol
問題是解決了,不過還是感到疑惑,這2個ODBC有什么不同嗎,


疑問1,我用本地ODBC能導表結構說明本地ODBC應該沒問題,是不是PC8不支持這種使用方法


2,我試過用本地ODBC導表結構,然后運行workflow時仍然用本地ODBC去取數,但仍然報錯


3,我試過用oracle10g提供的ODBC導表結構,這樣做出來的mapping能正常運行


我大概記着點,好像是Oracle客戶端版本比較低,會有這個問題,所以1 時,導入結構會有問題.
Informatica學習筆記19:多行記錄合並問題


問:
請教各位高手,如下記錄:
a b c
-----------
1 a b
1 c d
1 e f
2 a b
2 c d
2 e f
如何做到
a
-----------------------------
1 a b c d e f
2 a b c d e f


答:
用變量作,比較好作。。
用變量記住上一次記錄的a 字段, if(pre_a=curr_a, then col_sum2||curr_b||curr_c as col_sum, else pre_b||pre_c as
col_sum2), 可能最后加一個長度判斷,把長度不為最后要求長度的過濾掉..這樣作,好像不太靈活..
如果使用Sagent Data Flow的話至少有2種方法可以實現:


(1)利用pivot按行同時按列匯總的方式;

(2)表達式計算器中寫一個表達式即可:if ( ((GetValue("a",0)==PutValue("a",第 1 列) )))
then(PutValue("b",GetValue( "b",第 2 列+第 3 列 )+第 2 列+第 3 列))
else(PutValue("b",第 2 列+第 3 列))


免責聲明!

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



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