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,输入RepositoryName(例:JZJX),Database Username(例:etl),Database Password(例:etl),ODBCData Source(例:jzjxdev),Native ConnectString(数据库所在ip例:141.20.52.108)


1.1.2 添加Repository。
通过这一步你可以添加别人已经建好的Repository。
选择Repository – Add Repository,输入RepositoryName(例:JZJX),Username(例:etl),点击ok就可以看到名为JZJX的Repository在左边的浏览器中,但是此时还看不到它的内容,要看到它的内容或者对它进行操作必须先连接它。


1.1.3 添加Folder
选择Folder – Create,输入文件夹名称即可。


1.2 Designer 的使用
首先连接Repository,可以看到该Repository在RepositoryManager中创建的文件夹。


1.2.1 Sources 
    Sources文件夹下的表是抽取的来源表。
   导入方法:

   选择Tools菜单下的Source Analyzer,然后选择Sources菜单下的Import fromdatabase,连接想要连接的数据库,连接上后选择你要抽取的表点击ok你所选择的表就会出现在Sources文件夹下。
   说明:上面的导入过程导入的只是表结构,你也可以自己创建来源表,只要你创建的表的结构跟真实存在的那张表的表结构一致就行。


1.2.2 Targets 
     Targets文件夹下的表是抽取的目标表,也就是抽取结果的存放表.
     导入方法:选择Tools菜单下的Warehouse Designer,然后选择Targets菜单下的Import fromdatabase,连接想要连接的数据库,连接上后选择你要抽取的表点击ok你所选择的表就会出现在Targets文件夹下。
   说明:上面的导入过程导入的只是表结构,你也可以自己创建目标表,只要你创建的表的结构跟真实存在的那张表的表结构一致就行。


1.2.3 Mappings 的设计
       选择Tools菜单下的MappingDesigner才能进行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 OUTERJOIN 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的属性值之后一定要点击SqlQuery属性的
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属性设置为DataDriven,否则US将不起作用。


1.2.3.3 Expression
作用:计算一个值
用法:创建好expression_r(下简称EXP)后,将需要的用的字段从来源表拖拽到EXP,双击EXP,
    新增输出端口,编辑该端口的表达式。
命名方式:EXP_Name
类型:Passive/Connected
注意:要进行列运算一般用这个transformation; 此种transformation可以使用本地变量


1.2.3.4 Stored Procedure
作用:调用一个存储过程
用法:创建StoredProcedure(下简称SP)的时候连接数据库选择必要的存储过程。SP有连接和不连接到数据流两种用法。
连接到数据流方式跟一般的transformation类似,通过拖拽端口来实现数据流。
不连接到数据流分表达式调用和Pre-/PostSession两种方式。表达式调用方式中SP被Mapping中另一个transformation 中的表达式
调用。Pre-/Post Session方式就是在Session的属性中配置SP的运行时间,SourcePre-load(Session从源表查询数据之前),Source
Post-load(Session从源表查询数据之后),TargetPre-load(Session将数据插入目标表之前),Target Post-load(Session将
数据插入目标表之后)
命名方式:SP_Name
类型:Passive/Connected or Unconnected
注意:


1.2.3.5 Sequence Generator
作用:产生主键
用法:创建好Sequence Generator(下简称SEQ)后,双击SEQ,对SEQ的属性进行设置。StartValue属性是开始值,此属性只在选择了
Cycle选项才有效;Increment By 属性值是每次增加的值;End Value属性值是结束值;CurrentValue属性值是当前开始值;Cycle选
项被选择的话NEXTVAL的值达到End Value值之后会重新从StartValue开始;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)的时候选择要查询的表。和StoredProcedure一样SP有连接和不连接到数据流两种用法。
连接到数据流方式将要关联查询的字段从其他的transformation拖拽过来,然后双击LKP进行属性的配置。LookupPolicy On
Multiple Match属性表明当查询到多个行时采取取第一行,取第二行,报错中哪个策略.Lookup Condition属性值是查询的条件。
Lookup Sql Override属性值是查询执行的Sql文,我们可以在里面直接写Sql。Lookup CachingEnabled属性表明是否使用缓存,此项
一般选择为好,有利提高效率。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(连接类型)为NormalJoin,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 joinMaster; 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的属性进行设置。在Grouptab
中添加组,为每组编辑该组的过滤条件。
命名方式:RTR_Name
类型:Active/Connected
注意:组过滤条件表达式的计算值必须是真或者假。


1.2.3.12 Rank
作用:排序记录,只输出最顶层或最低层的n个记录
用法:创建好Rank(下简称RNK)后,将需要的用的字段从transformation拖拽到RNK,双击RNK,对RNK的属性进行设置。在Portstab中
有一个名为‘R’的列,选择你要排序的列。你还可以选择你想分组的列。在Propertiestab中Top/Bottom属性,Top表示选择顶层的
记录,Bottom表示选择底层的记录; Number OfRanks属性值是整数,表示要选择的记录条数。假设你在‘R’列中选择了名为’
Price’的列,而且Group By选择了‘Name’列,Top/Bottom属性选择的是‘Top’, Number OfRanks属性值是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 andVariables,在窗口新增变量或者参数,并对它的
数据类型,数据大小,初始值进行设置。添加的参数和变量在本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–StartDebugger,在点击‘下一步’的过程中选择调试过程运行在哪台服务器然后为来源表选择数据库,
最后到完成。等调试初始化好之后点击Mappings–Debugger–Continue(或按F5),即可开始调试,选择某个目标表即可看该表的结果
数据。如果还想看中间某个transformation的数据,在开始调试前为该transformation增加一个断点。


1.3 Server Manager 的使用
1.3.1  RegisterServer(注册服务器)
任何session都必须运行在某个服务器上,所以如果ServerManager里没有服务器的话必须注册一个,当然你也可注册多个服务器。
服务器的注册过程如下:
选择Server Configuration – Register Server,Server输入 的是要注册的服务器的名称;HostName 输入的是运行了informatica
server的机器名或iprotocol选择TCP/IPortNumber输入4001。最下面的是服务器的变量设置,设置的是session或batch运行时一些
文件的存放位置,比如说log文件bad 文件cache文件,一般不用更改。这样一个服务器就注册到repository了,不过后面你可以双
击它重新编辑。


1.3.2 Add DataBaseConnection(添加数据库连接)
选择Server Configuration – DataBaseConnection,点击Add,然后选择数据库的类型。不同类型的数据库配置起来不一定一样,下面说明Oracle 和SQLServer两种数据库连接的配置。
Oracle类型数据库连接配置:Data Source 输入数据源名称;UserName输入数据库连接的用户名;Password输入数据库连接的密码;Connect String 输入Oracle TNS服务名。
SQL Server 类型数据库连接配置: Data Source 输入数据源名称;UserName输入数据库连接的用户名;Password输入数据库连接的密码;Database Name输入数据库名称;ServerName输入数据库的ip地址;Domain Name输入数据库的域名。


1.3.3 Add Session(添加抽取任务)
Mapping只是数据抽取过程的设计,要使这个过程运行必须为该Mapping建立对应的session,然后运行该session。选择Operations-AddSession,在窗口中选择一个Mapping点击ok会出现编辑该session的窗口。
Session输入框输入该session的名称;
server选择该session将运行在的服务器;
Treat rows有Insert,Delete,Update,DataDriven四个选项,表明抽取出来的数据在目标表中作何种操作,只有在session对应的mapping中有UpdateStategy时才能选择Data Driven而且也必须选择Data Driven;
Source 框选择来源表所在的数据库;
Target Options 中的Insert,Update(as Update),Update(asInsert),Update(else Insert),Delete,Truncate table选项的意思分别是:将insert作insert操作,将Update作insert操作,将Update先做Update操作不成功再作insert操作,将delete作delete操作,在对目标表操作前删除目标表所有数据。这些选项如果与UpdateStategy冲突server将以这里的设置为准,也就是说这里的设置可以覆盖UpdateStategy的设置;Parameter输入框中输入session要用到的参数或变量的所在文件的路径;其他设置比较简单或者保持原来的值即可,这里就不再详细说明了。除了在添加session的过程中可编辑session之外,双击已添加的session也对session重新设置。
注:如果mapping 中有Joiner的话,session的编辑窗口的SourceType就变成heterogeneous(不同类),这样就无法通过设置Source
来设置来源表的位置,只能在Source Location tab中为每个来源表设置位置。


1.3.4 Add Batch(添加批操作任务)
添加Batch可以将一系列的session串起来,这样就可以让必须按顺序执行的session有序的执行。添加方法:选择Operations-AddBatch,在窗口中对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设置不是选择的‘Runonly ondemand’,那么该session或者batch就会在设置完后就处在Scheduled状态,时间一到就会自动运行。(可以右击服务器选择monitor来监视运行在该服务器下的session或者batch当前状态)。

 


Informatica学习笔记1:UPDATE ASINSERT


问:
要求实现每天抽取数据,而且是如果有改变才抽取更新,没有就不更新,
因为源表中有最后修改时间的字段,我让它 和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 updatesql,
可以不用理会真实表结构中是否有主键
Informatica学习笔记2:客户端连接服务器


问:
我通过客户端连接到服务器,做了一个workflow,运行的时候出现错误,说是服务器连接不上
repository server和infomatic server他俩的port是不是要一样还是不需要?


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


问:
Repository server服务起来了,就是informatica server起不来了,在配置的时候,是informaticaserver的ip解析不出来,怎么才能把那个地址和主机对应起来


答:
1.直接写IP
2.编辑客户端的%WINDOWS%/SYSTEM32/DRIVERS/ETC/HOSTS文件,把ip与名字的对应关系加进去,客户端这台机器就可以自己解析了
3.找DNS或者什么解析服务器搞定。


问:
informatica server装在unix操作系统下,能不能找到配置informaticaserver的配置文件对应的是那一个文件.


答:
unix下缺省是pmserver.cfg,可以用pmconfig这个命令行工具修改配置文件,也可以直接打开编辑。
如果不是缺省的配置文件名可以通过, ps -efl|grep pmserver看看是哪个文件名。


问:
谢谢,pmserver.cfg这个文件中的配置信息我看过了,里面设置的都是repository serverip:192.168.0.1和port:6001,怎么找不到配
置的informaticaserver的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: Requestacknowledged
(Server10) Start workflow: ERROR: Error in starting execution ofworkflow [id = 8] [wf_s_m_test]. Please check the server log formore 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 -K2082340862]. Error is [An error occurred while creating therepository.].


答:
建repository在"Repository Server Administration Console"里面可以找到ActiveLog的,可以看看出错信息,出错多的好像都是插入一个LONG的值,通常建策略库出问题都是字符集捣的鬼,几个地方要注意数据库的字符集,系统NLS_LANG环境变量,操作系统的缺省字符集(windows在地区设置里面看,还有缺省输入法也可能影响),理论上不同的字符集只要是可转换的,都是可以的,不过弄成一样的比较简单了。


问:
谢谢guruhao的提示和帮助,我决定将Oracle和Informatica重新安装一下再来测试一次,我的操作系统的缺省字符集(windows在地区设置里面)是china系统NLS_LANG环境变量是N/A


答:
这一段都是正常的,droptable不成功,属于建库之前清理表的动作,还要往后,大约在中间的位置。有个真正的插入数据的错,你最好设置一下NLS_LANG使之与oracleserver的字符集相匹配。
it should be Oracle characterset is not same in Oracle Server andclient.


Informatica学习笔记6:建立workflow的问题


问:
我用powercenter8建立一个mapping后,在workflowmanager中建立了workflow,但是运行这个workflow时却提示以下错误信息:Could not startexecution of this workflow because the current run on thisIntegration Service has not completedyet我检查了一下:server中的各服务已经正常启动了,但是就是运行时出现这种情况,请问是什么原因导致的??以及怎样解决呢???各位知道的就请说一下吧。


答:
该错误应该是说你建的这个workflow正在运行,且还没有结束,因而你不可以再次启动该工作流。你可以通过Monitor观察一下。


问:
该错误应该是说你建的这个workflow正在运行,且还没有结束,因而你不可以再次启动该工作流。你可以通过Monitor观察一下。
但是我在monitor中又看不到任何的session在运行啊~


答:
将你的informaticaserver在service里重新启动后再运行看看(问:过一阵子之后再运行就正常了。不知道为什么?怪怪的~~~)


Informatica学习笔记7:workflow执行报错


问:
我在执行某个workflow 的时候报了如下错误:
FATAL ERROR : Unexpected Condition infile[/u05/bld65_64/pm713n/server/dmapper/widget/wjoiner.cpp] line[3176].
Contact Informatica Technical Support for assistance. Aborting thisDTM process due to an unexpected condition.
请问各位这是什么原因?我看了一下日志文件,好像是初始化的过程都还没有结束就报错了。


答:
This error occurs when the Joiner transformation in the mapping hasbecome 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 whenimporting 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复制一个数据库,源库是一个SQLServer的数据库,目标库是DB2数据库,请问怎么做?


答:
一个表一个表的做。
如果想一次复制所有表,干脆用SQL server的DTS好了。
如果是整个库的话,不如用DB import/export了..ETL强调的是T..


Informatica学习笔记11:informaticaservices不能启动


问:
环境:
在一台机器上安装了informatica services+client+oracle10g(作为repository)。informatica的版本是8.1.1,启动
informatica services时没有错误,但是过几分钟就停了。日志信息catalina.out如下:
2006-11-28 16:12:46 org.apache.coyote.http11.Http11Protocolinit
信息: 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.StandardServicestart
信息: Starting service Catalina
2006-11-28 16:12:46 org.apache.catalina.core.StandardEnginestart
信息: Starting Servlet Engine: Apache Tomcat/5.0
2006-11-28 16:12:46 org.apache.catalina.core.StandardHoststart
信息: XML validation disabled
2006-11-28 16:12:47 org.apache.catalina.core.StandardHostgetDeployer
信息: Create Host deployer for direct deployment ( non-jmx )
2006-11-28 16:12:47 org.apache.catalina.core.StandardHostDeployerinstall
信息: Processing Context configuration file URLfile: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 incompatiblexerces-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 inthe<INFA_HOME>\server\bin directoryto the C:\WINNT\system32 directory.
<INFA_HOME> is the Informaticainstallation 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的codepage是ISO 8859-1. 结果中文字符总是抽取不成功。请问如何处理才能正确抽取中文字符?


答:
informatica server的code page是ISO 8859-1,你得改成UNICODE的模式,才可以比较适合作转换..你在workflowmanager中的那个ODBC的连接,应该也有codepage的设置吧..改改试试..


问:
informatica server的code page是ISO 8859-1,你得改成UNICODE的模式,才可以比较适合作转换..你在workflowmanager中的那个ODBC的连接,应该也有codepage的设置吧..改改试试..
谢谢斑竹。
问题是我没办法去改informaticaserver的配置。如果就用当前配置,有可能做到正确抽取中文么?能够做一些编码的转换来实现么?


答:
乱码,就找几个点的码制设定了..
源就那样了, ETL服务器上配的ODBC,可能会有codepage 相关; 再就是ETL 服务器, 你已设为ISO8859-1,如果不对中文数据作转换,应该不会乱; workflow manager中,配置ODBC我忘了是不是也有code page设定了..就这么几块..你分开检查一下了.你用个什么工具,通过系统ODBC去访问一下,如果看到的不是乱码,再从后面几点排这个错了..(修改了连接mysql的odbc,加上stmt=SET NAMES 'utf8' 就好了,谢谢斑竹!)


Informatica学习笔记13:没有Lincense导致的问题


问:
各位兄弟们帮忙看一下,informatica的问题,我使用的是6版本,目标数据库是oracle10g,在安装好,配置好的时候,执行workflow的时候报这样的错误
CMN_1022 Database driver error...CMN_1022 [
[Microsoft][ODBC Driver Manager] Data source name not found and nodefault 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,测试一下,看是不是能连接到远程的oracleserver.
你在workflow manager中,建立ODBC时,那个connectstring写上这个名字.odbc_ora_hr如果在系统的ODBC是通的,应该就可以了吧.


问:
ODBC用的是informatica自带的odbc安装的,用的是window的,我也想用oracle 的驱动,但是我没有oracle的Lincense key,我只有odbc的所以只能用odbc的了,系统odbc配置的图和workflowmanager中配置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_fsfs


2.建lookup(从w_test_f),in的字段就是上面select出来的col1和col2,比较字段是w_test_f中的col1和col2,取出w_test_f中的主键selectf.row_id,f.col1,f.col2 from w_test_f f, w_test_fs fs wheref.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_ff 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如何实现增量抽取?


问:
在 informaticapowercenter中如何实现增量抽取?我想了一下使用时间戳,但是这个时间戳如何去使用不是很明白,希望各位高人在这边能指点一下,如果有例子更好,在这里先谢谢了!


答:
有时间戳就直接用呗,总有个办法记录上次抽取的时间的,也有办法设置本次的截止日期,然后 where timestamp> last_time and timestamp <=current_time,有时间戳的系统和工具没啥大的关系
问:那在参数中如何去调用呢?


答:
这个你看看mapping 的参数和变量那块吧.. help 当中有详细写..你这样问,太大,谁也很难花时间去详细写的.
关于增量抽取的问题,我在help里看到了以下内容:Use the following filter to incrementallyextract data based on the SALES.sales_datetime column in thesource: SALES.sales_datetime > TO_DATE(`

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 enableit. Use the Administration Console at http://smu-o7542xepp54:6001/adminconsoleto correct the error and enable the service. You can getmore information in the Repository Service logs in theAdministration Console Log Viewer. Select Ignore to continue withthe installation and enable the Repository Service afterinstallation.STDOUT:......
请教大家,为什么连接不上RESPOSITORY SERVCIE啊, 2个数据库连接测试都是 测试通过.


答:
和db 操作一样, 可以connect只是前提保证,在执行大的SQL时,因为权限,网络,字符集不统一或大SQL的原因,极有可能会失败.
你先描述一下,你所有DB是啥吧..不同数据库,反应是不同的.


问:
SQL SERVER 2000开发版+SP4+WINXP SP2 和 SQL SERVER 2005+sp1+ win2003server+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 有关系? 以前SQLSERVER出问题,多半都是网络,firewall 和SQL SERVER的设置上。
我曾在SQL SERVER上安装过pwc8.x,是没有问题的。 你找到那些详细信息,如果还不行,把信息贴出来。
我前几天也装过知识库用SQLServer2000的,好象没什么问题,不过就是觉得在建知识库那的connectstring要用:主机名@数据库名这点不知道楼主注意到没有,这个环境下还没有碰到过其他问题,还有一个数据库只能对应一个知识库的,如果之前在某一数据库上建过知识库,那么第二次再在此数据库上建知识库也是无效的.因此,
建domain的数据库和建知识库的数据库最好分开,要建知识库的数据库最好是空库,至少也是不能有存放知识库的元数据.如果domain和知识库装在同一数据库中,那么只清除知识库的元数据而不清除domain信息,直接在数据库里头不太好清,最好是在控制台中对知识库用deletecontent然后删除知识库.


我讲的可能不是楼主的问题的解决方法.仅仅和大家分享一下小经验.


问:
在虚拟机上终于搞定, 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只能一直累加下去,可以用localvariables,可以保留上一条的信息
设置三个变量,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遇到不同的groupby条件后,应该是可以自动清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 infile
[\ZeusbuilderProduction\view\powrmart\common\odl\oracle8\oradriver.cpp]line [241]. Contact Informatica Technical
Support for assistance. Aborting this DTM process due to anunexpected 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的问题我也想过,但不知道怎么来检查,因为错误信息里的那个路径我还没找到。。希望指点一下


答:
你是按我说的用 datadirectODBC建立一个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 wireprotocol
问题是解决了,不过还是感到疑惑,这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 ascol_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 列))

posted @ 2016-11-22 11:56  TwinStudio  阅读(8767)  评论(0编辑  收藏  举报