1. INFORMATICA CLIENT的使用
1.1 Repository Manager 的使用
1.1.1 建立Repository。
前提:java
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)mysql
1.1.2 添加Repository。
經過這一步你能夠添加別人已經建好的Repository。
選擇Repository – Add Repository,輸入Repository Name(例:JZJX),Username(例:etl),點擊ok就能夠看到名爲JZJX的Repository在左邊的瀏覽器中,可是此時還看不到它的內容,要看到它的內容或者對它進行操做必須先鏈接它。sql
1.1.3 添加Folder
選擇Folder – Create,輸入文件夾名稱便可。數據庫
1.2 Designer 的使用
首先鏈接Repository,能夠看到該Repository在Repository Manager中建立的文件夾。express
1.2.1 Sources
Sources文件夾下的表是抽取的來源表。
導入方法:apache
選擇Tools菜單下的Source Analyzer,而後選擇Sources菜單下的Import from database,鏈接想要鏈接的數據庫,鏈接上後選擇你要抽取的表點擊ok你所選擇的表就會出如今Sources文件夾下。
說明:上面的導入過程導入的只是表結構,你也能夠本身建立來源表,只要你建立的表的結構跟真實存在的那張表的表結構一致就行。小程序
1.2.2 Targets
Targets文件夾下的表是抽取的目標表,也就是抽取結果的存放表.
導入方法: 選擇Tools菜單下的Warehouse Designer,而後選擇Targets菜單下的Import from database,鏈接想要鏈接的數據庫,鏈接上後選擇你要抽取的表點擊ok你所選擇的表就會出如今Targets文件夾下。
說明:上面的導入過程導入的只是表結構,你也能夠本身建立目標表,只要你建立的表的結構跟真實存在的那張表的表結構一致就行。windows
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 (`
$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的時候怎麼來用,爲何這樣就能夠」咋都能做「了?
很差意思,剛剛沒講清楚。
再用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 列))