informatica 學習日記整理

小小黃-812發表於2014-04-14

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\server\bin directory to the C:\WINNT\system32 directory.
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') AND SALES.sales_datetime < TO_DATE (`$$$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 學習日記整理(轉)
再用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 列))

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29144194/viewspace-1141535/,如需轉載,請註明出處,否則將追究法律責任。

相關文章