标签:heap 提高 wpa misc percent users rest nfa 使用
|
目 录
Informatica开发规范.... 1
目 录.... 2
1 编写目的.... 4
2 ETL研发责任人界定.... 4
3 ETL 研发数据库操作约束条件.... 4
4 定义.... 4
5 范围.... 5
6 系统通用属性.... 6
7 命名规则.... 6
7.1 通用规则... 6
7.2 Connection 数据源连接... 6
7.2.1 Connection 数据连接命名... 6
7.2.2 数据库类型对应缩写... 6
7.2.3 生产数据库的SID.. 7
7.3 组件命名.... 7
7.4 Folder/mapplet/Mapping/Session/Workflow/Schedule命名.... 9
8 创建Connection连接.... 9
9 创建文件夹.... 10
9.1 创建文件夹... 10
9.2 复制共享对象... 11
10 Mapping设计.... 13
10.1 导入源和目标的表结构... 14
10.2 Mapping设计... 16
10.3 常用组件设计说明... 17
11 Workflow设计.... 19
11.1 创建Workflow.. 20
11.2 Workflow属性设置... 20
11.3 添加可复用Session “pre_sql”、“post_sql”. 22
11.4 编辑Assignment. 23
12 Session设计.... 23
12.1 创建Session.. 24
12.2 必要Session属性设置... 24
12.2.1 General属性... 24
12.2.2 Property属性... 24
12.2.3 Config Object属性... 25
12.2.4 Mapping属性... 26
12.2.4.1 Source 属性... 26
12.2.4.2 Target属性... 27
13 从中间库取数据.... 28
13.1 复制共享对象... 28
参考复制共享对象创建‘M_GetParam_Mid’的快捷方式,复制’ pre_S_MID’、’post_S_MID’ 28
13.2 Workflow设计... 28
14 开发建议.... 30
15 备份及恢复.... 30
15.1 备份... 30
15.2 恢复... 31
16 参考文档.... 31
17 常见问题解决.... 31
本文档旨在本次项目中实施,Informatica工具所涉及到的数据连接,命名规范和工作开发规范方面的规定和指引,统一开发习惯,以便在开发过程中能起到事半功倍的效果。
1)资科内部业务数据流转,采取使用方研发原则,即谁取用数据,谁负责ETL版本研发。目标系统运维人员进行运维。
2)对于业务用户的独立管理系统,没有专门研发,由取数源端研发负责informatica 版本研发推送数据。源端系统对应运维人员负责对应workflow运维。
1)对于增量同步表,需要源表和目标表存在主键。
2)增量字段上,需要有索引
3)增量字段 (如时间条件,必须严格顺序进入数据库,或者增量同步完成后,严格保证增量同步的取数范围后续不会有数据进入)
同步场景 |
同步要求 |
|||
同步类型 |
源表和目标表是否存在主键或者唯一键 |
增量字段上是否有索引(源表和目标表) |
update 同步 |
delte同步 |
有标识字段增量 |
存在pk或者索引 |
需要存在索引 |
需要存在updatetime字段,并使用update字段PK 进行update 更新同步。 |
需要将删除数据写入临时表,etl同时同步临时表后将目标库对应数据删除,源端也需要进行定期清理临时表 |
源表全量读取同步 |
不存在约束或者索引 |
N/A |
N/A |
N/A |
源表全量读取同步 |
存在pk或者索引 |
N/A |
N/A |
N/A |
序号 |
术语或缩略语 |
说明性定义 |
1 |
ETL |
Extraction-Transformation-Loading,数据加载 |
2 |
Source |
源 |
3 |
Target |
目标 |
4 |
Transformation |
组件 |
5 |
Mapping |
数据映射 |
6 |
Mapplet |
数据映射集,可复用的Transformation组合 |
7 |
Session |
执行任务 |
8 |
Worklet |
数据工作集 |
9 |
Workflow |
数据工作流 |
10 |
Schedule |
调度频率 |
11 |
Parameter |
参数 |
|
|
|
12 |
ETLUser |
用与ETL数据同步的数据库用户 |
13 |
ProductDatabaseSID |
生产系统数据库SID |
|
|
|
本文档读者包括:
l 项目经理;
l 系统管理员;
l DBA管理员;
l 开发人员;
l 测试人员;
l 运维人员;
本项目需要使用到的技术:
l ETL数据整合及转换:Informatica;
l 操作系统:Linux、Windows
l 数据库:Oracle、Mysql、DB2、MS SQLServer等
|
Service Variable |
Description |
值 |
1 |
$PMRootDir |
Infa_share根目录 |
<Installation_Directory>\server\infa_shared |
2 |
$PMSessionLogDir |
Session 运行日志目录 |
$PMRootDir/SessLogs. |
3 |
$PMBadFileDir |
Reject files拒绝文件目录 |
$PMRootDir/BadFiles. |
4 |
$PMCacheDir |
Temporary cache files |
$PMRootDir/Cache |
5 |
$PMTargetFileDir |
Target files 目标文件生成目录 |
$PMRootDir/TgtFiles |
6 |
$PMSourceFileDir |
Source files 平面文件源文件目录 |
$PMRootDir/SrcFiles |
9 |
$PMWorkflowLogDir |
Workflow logs workflow执行日志目录 |
$PMRootDir/WorkflowLogs. |
10 |
$PMLookupFileDir |
Lookup files lookup生成的cache目录 |
$PMRootDir/LkpFiles. |
11 |
$PMTempDir |
临时文件目录 |
$PMRootDir/Temp |
12 |
$PMStorageDir |
HA时,记录workflow的运行状态 |
$PMRootDir/Storage. |
以下元素,数据库表,字段名称,函数名称,函数表达式,SQL语句均采用大写字母。
数据链接分为源数据库链接与目标数据库链接,ETL的E(抽取)与L(加载)的链接。
数据库链接方式分为Native、ODBC两种方式:
1)Native是采用相应数据的客户端连接来抽取、加载数据,比如oracle、DB2等;
2)ODBC是采用DataDirect ODBC的方式连接数据库,比如mysql、MSSQL。
数据连接的命名采用:DataBaseType_ProductDatabaseSID_ETLUSER。
说明:DataBaseType为数据源类型,ProductDatabaseSID生产数据库的SID,ETLUser为用与ETL数据同步的用户。
例如: Ora_ASURE_BILETL,连接方式为Native方式,Ora表示数据类型为Oracle,ASURE为阿修罗生产数据库SID,BILETL为ETL的操作用户。
例如:ODBC_ Mysql_ASURE_BILETL,ODBC表示采用ODBC的方式连接。Mysql为数据库类型,ASURE为阿修罗系统,BILETL为ETL操作用户。
表5-1 数据库类型缩写
序号 |
数据源类型 |
缩写 |
1 |
Oracle |
Ora_ |
2 |
DB2 |
DB2_ |
3 |
Mysql |
Mysql_ |
4 |
Microsoft SQL Server |
MSSQL_ |
5 |
Sybase |
Sybase_ |
6 |
Greenplum |
GP_ |
7 |
Teradata |
TD_ |
8 |
ODBC |
ODBC_DataType_ |
|
|
|
表5-2 数据库信息表
序号 |
数据库中文名 |
数据库SID |
备注 |
1 |
阿修罗系统 |
ASURE |
|
2 |
新车辆管理系统 |
VMS |
|
3 |
短信系统 |
SMSDB |
|
4 |
|
|
|
表5-3 常用组件命名前缀
序号 |
组件名称 |
图标 |
命名规范 |
含义 |
1 |
Source Qualifier |
|
sq_ |
从数据源读取数据 |
2 |
Expression |
|
exp_desc |
行级转换 |
3 |
Filter |
|
fil_ |
数据过滤 |
4 |
Sorter |
|
sort_ |
数据排序 |
5 |
Aggregator |
|
agg_ |
聚合 |
6 |
Joiner |
|
jnr_ |
异构数据关接连接 |
7 |
Lookup |
|
lkp_ |
查询连接 |
8 |
Update Strategy |
|
ust_ |
对目标编辑 insert, update, delete, reject |
9 |
Router |
|
rot_ |
条件分发 |
10 |
Sequence Generator |
|
sqg_ |
序列号生成器 |
11 |
Normalizer |
|
nrm_ |
记录规范化 |
12 |
Rank |
|
rnk_ |
对记录进行TOPx |
13 |
Union |
|
uni_ |
数据合并 |
14 |
Transaction Control |
|
tc_ |
对装载数据按条件进行事务控制 |
15 |
Stored Procedure |
|
sp_ |
存储过程组件 |
16 |
Custom |
|
cus_ |
用户自定义组件 |
17 |
HTTP |
|
http_ |
WWW组件 |
18 |
Java |
|
java_ |
Java自编程组件 |
表5-4 Folder/mapplet/Mapping/Session/Workflow命名规范
情形 |
名称 |
例如 |
|
FOLDER |
|||
公用文件夹 |
000_Shared |
|
|
文件夹 |
ProductDatabaseSID_OWNER |
SFOSS_ EXP5(sfoss是生产阿修罗数据库sid, exp5是我们要操作的表owner) |
|
MAPPLET |
|||
|
MPL_Business Name |
MPL_LRNull |
|
MAPPING |
|
|
|
单源单目标 |
M_Target Table Name |
M_TT_WAYBILL |
|
多源单目标 |
M_Target Table Name |
M_TT_WAYBILL |
|
单源多目标 |
M_1ToN_Function description |
M_1ToN__Broadcost |
|
多源多目标 |
M_NToN_Function description |
M_NToN_Gather |
|
SESSION |
|||
可复用post_S_ |
post_S_ mapping name |
post_S_M_STGOMS_ORDERS |
|
可复用pre_S_ |
pre_S_ mapping name |
pre_S_M_STGOMS_ORDERS |
|
单mapping单session |
S_mapping name |
S_M_STGOMS_ORDERS |
|
单mapping多session |
S_mapping name_区域/子系统 |
S_M_STGOMS_ORDERS_BJ S_M_STGOMS_ORDERS_GX (BJ代表北京,GX体表广西) |
|
WORKFLOW |
|||
单mapping单session |
WF_mapping name |
WF_STGOMS_ORDERS |
|
单mapping多session |
WF_mapping name |
WF_STGOMS_ORDERS |
|
多mapping多session |
WF_function description |
WF_UpdateUsersAndGroups |
|
Schedule |
|||
SCHDL_运行间隔_(运行时间)_(截止时间) |
每5分钟运行一次,2014年5月6号过期 |
SCHDL_5MIN_Stop20140506 |
|
|
每5分钟运行一次,永不过期 |
SCHDL_5MIN_FOREVER |
|
|
每天21:30运行,永不过期 |
SCHDL_1Day_AT2130_FOREVER |
|
|
每月4号21:30运行,永不过期 |
SCHDL_1MON_4THAT2130__FOREVER |
|
创建Connection由Informatica管理员完成,但在开发环境和测试中开发人员有修改Connection属性的权限。
以创建Oracle Connection“Ora_ASURE_SFMAP”为例进行说明
8?1 创建Connection
8?2 修改Connection属主
在创建文件夹前,需要在目标数据创建用户ETLMGR,脚本在文件夹“ETLMGR”中,请按照顺序执行
操作:FolderàCreateà在弹出的对话框中输入文件夹名称
不关闭对话框进入下一步
9?1 选择文件夹属主
此部分操作由开发从员完成
9?2 创建共享Mapping快捷链接
9?3 复制共享Session
然后处理Mapping冲突,为找不到的Mapping重新选择对应的快捷方式
9?4 Mapping冲突处理
冲突处理完接提示选择下一步并确认,完成这一步骤的操作
9?5编辑“post_S”
9?6 编辑“pre_S”
注意1:在进行Mapping之前,需要在目标表数据库的ETLMGR.ETL_INCR_PARAM中插入对应目标表相关的信息,具体内容可能过查询ETLMGR.ETL_DICT获得帮助
注意2:ETLMGR.ETL_INCR_PARAM.TIME_BEFORE_NOW(增量结束时间与当前时间的时间差,以秒为单位)的值建议不小于300,以避免一些来不及commit的数据会丢失。
登陆到Designer,本章所述的所有操作均在Designer客户端。
导入源表结构
创建源表的ODBC连接
EnableNcharSupport: 默认是不打勾的,不打勾的情况下导入char,varchar,varchar2会变成nchar,nvarchar,nvarchar2
ODBC连接只是作为导入源表和目标表的结构的媒介,不会进行实际数据的处理,实际数据的处理由服务端Connection完成
从ODBC连接中导入源表的结构
导入目标表结构
导入目标表结构与导入源表结构相似,但是要先切换到目标表的编辑窗口
开发时注意查看客户端左上方的Folder显示,一定要在正确的Folder里面工作。
展开文件夹“000_Sample”,找到Mapping“M_for_copy”并将其拖拽到目标文件夹,在弹出的对话框中选择“Yes”
操作:菜单MappingàEdit
Comment(注释) 内容填写如下:
Create date: 日期
Create by: 用户名(现实中文名)
Desc: decription 例:用户信息交换
[
Modify Date:
Modify by: 用户
Desc: decription 例:过期用户信息不再交换
]
操作:在复制Mapping的过程中已经创建
l 在组件中创建变量时,注意选择数据类型,选择长度,在给变量赋值或将变量赋值给字段时要保持数据类型一致,不一致时要使用显式类型转换。
l 在做字符处理时,注意NULL,空字符串和空格的区别以及不同的判读和处理方式
l 不需要输出的端口不勾选OutputPort。当组件中有重名的字段时,输入的字段在原字段后加‘_IN‘,变量的字段在原字段后加‘_V‘,输出字段名尽量保持和下一个组件的输入字段名名称一致,以便使用按名称自动连接
l 数据加载方式:全量,增量
l Source Qualifier 组件使用:
时间戳字段>= TO_DATE($$INCR_START_DT,’YYYYMMDD HH24:MI:SS’) And
时间戳字段 < TO_DATE($$INCR_END_DT,’YYYYMMDD HH24:MI:SS’) (注意这里是小于,而不是小于等于) 或
主键字段> TO_DATE($$INCR_START_ID,’YYYYMMDD HH24:MI:SS’) And
主键字段 <= TO_DATE($$INCR_END_ID,’YYYYMMDD HH24:MI:SS’) (注意这里是大于,而不是大于等于)
l Joiner 组件使用:
l Lookup 组件使用:
1: Connect
对于mapping中对某个表只查询一次的尽量使用Connect Lookup,在使用Connect lookup的时候对于没有用到的Column可以删除掉,防止浪费Cache空间,一定要使用Cache --Lookup Caching Enabled
2: Unconnect
对于mapping中对某个表查询多次的尽量使用Unconnect Lookup,对于没有用到的
字段可以进行删除,防止浪费Cache空间
3: Lookup函数
对于mapping中的Expression中进行查询的尽量使用Lookup函数
4:Lookup表最好从Targets中获取,也可以从Sources中获取
5:Lookup函数不能在mapplet中使用
6:Lookup 使用中的条件允许 Null = Null
l Update Strategy组件使用:
不能使用DD_REJECT,可以在Update Strategy组件前添加filter组件将需要做DD_REJECT的数据过滤掉
l AGGREGATOR 组件使用:
Maximum Memory Allowed For Auto Memory Attributes 512M
Maximum Percentage of Total Memory Allowed For Auto Memory Attributes 5%
Worklfow运行的时候会从他们中取小的一个值
开发时注意查看客户端左上方的Folder显示,一定要在正确的Folder里面工作。
11?1查看工作文件夹
Workflow设计概览:Workflow设计完成后的样子及各部分功能
登陆到Repository Manager,打开目标文件夹,展开(不是打开)文件夹“000_Shared”,找到Workflow“WF_for_copy”并将其拖拽到目标文件夹,此时将会弹出一个“Copy Wizard”对话框。在冲突处置中选择“rename”并按命名规范重命名。
11?2按命名规范重命名
Create date: 日期
Create by: 用户
Source table: Source table1
Source table2
……
Target table: Target table1
Target table2
……
Desc: decription 例:将广西用户信息同步到集团
[
Modify Date:
Modify by: 用户名(现实中文名)
Desc: decription 例:添加北京用户信息同步到集团
]
创建可复用的计划
为Workflow分配计划
如果在文件夹下找不到pre_S”、“post_S”,参考复制共享对象
11?3 可复用Session添加到Workflow
Failed Parent if this task failed:勾选
Treat the input link as: And
11?4 修改General属性
Session Log File Name:FolderName_SessionName.log
(如:000_Sample_pre_S_M_CJN001.log、 000_Sample_post_S_M_CJN001.log)
11?5 设置pre_S_*的日志文件
设置$$TARGET_OWNER,$$TARGER_TABLE的值
$$TARGET_OWNER = 目标表的owner
$$TARGET_TABLE = 目标表名
11?6 编辑Assignment
登陆到Workflow Manager,开发时注意查看客户端左上方的Folder显示,一定要在正确的Folder里面工作。
登陆到Workflow Manager,,打开Session放置的Workflow
在工具栏的左上角左击session创建图标后松开鼠标,然后在工作区任意位置左击一下弹出Session创建对话框,选择正确的mapping,并按照5.4规范命名
12?1 创建Session
将Assignment、Sessionpre_S_*、新建的Session、post_S_*串联
12?2 串联Session
对于Session的修改和设置一定去到Session工作区设置,尽量不要在Worklet或者Workflow里面做特殊设置,比如指定表名或者指定用户名等。
12?3 General属性设置
当 增量参数是由pre_S*生成的参数文件控制时:$PMRootDir/BWParam/$$PARAM_FILE (固定值)
当 增量参数不是由参数文件控制时:留空
对于目标表只有Insert的,就选择,Insert,
对于目标表中存在更新,同时没有使用UpdateStrategy控件的使用: Update
对于Mapping中使用UpdateStrategry控件的使用Data driven
调度增量(或者一次全量)超过500万 并且 在加载数据之前没有删除冗余数据操作的调度 选择:Resume from last checkpoint
其它:Restart task
12?4 Properties属性设置
当运行速度较慢时考虑调整
Informatica用来存储数据的最小单位,默认值12KB。Information初始化Session时,对每个Session分配2个Block作为初始化分配。如果一行数据大于Block的大小时则每一行数据均要移动多个Block,影响执行效率。建议取一行数据最大值的整数倍作为Block的大小。如一行数据的大小是8KB,可以调整Default buffer block size为24KB或者16KB
512M 单次取数介于500000行到2000000
1024M 单次取数介于2000000行到5000000
以上两个参数通常情况下保留缺省值即可,对于某些占用内存较大的Mapping可以考虑增大,最大不能超过1G,同时他们之中取小的值作为最终值
Tips:菜单—>TaskàSession ConfigurationàEditàPropertiesà 将Save session log for these runs 设为100
可修改整个文件夹所有session的“Save session log for these runs”的值
配置源表的连接信息,包括使用的Connection(连接),源表
12?5 设置源表的连接信息
检查源表的过滤条件(可选),默认是继承mapping中Source Qualifier 中的过滤条件一致,在session里可以进行个性化设置
12?6 设置Source Filter
Target load type : Bulk/Normal 对于目标表中存在索引的,Target load type只能选择l装载方式。默认值是Bulk,本文要求统一设置成Normal
Tips:可在Workflow Manager中的Tools->Options->Miscellaneous中进行初始设置
Insert: 勾选
Update as Update :勾选,当指定的目标表中只有Update动作时,使用
Update as Insert :不勾选, à当指定的目标表中只有Insert动作时,使用
Update else Insert:不勾选 à 可用于维表或其它主数据表的数据增量操作,如果已经有US更 新策略组件则不用。
Delete :不勾选
Truncate target table option : 通常是全量抽取时,用于目标表需要先进行清除动作时,这个选项要慎重选择因为会清空全表的数据。默认是末被勾选的。
Reject filename: $$REJECT_FILE
情况1:按时间增量基于delete-insert方式时填写以下语句,否则留空
Delete from $$TARGET_OWNER.$$TARGET_TABLE
Where (increment column)>=to_date(‘$incr_start_dt’, ‘YYYY-MM-DD HH24:MI:SS’)
And (increment column)<to_date(‘$incr_end_dt’, ‘YYYY-MM-DD HH24:MI:SS’);
Commit;
情况2:按主键增量且基于delete-insert方式时填写以下语句,否则留空
Delete from $$TARGET_OWNER.$$TARGET_TABLE
Where (increment column)> $$incr_start_ID
And (increment column)<= $$incr_end_ID
Commit;
情况3:全量
留空
Post SQL: 默认留空,如果需要在目标表加载完成在数据库执行的任务可自行编写
Target Table Name: $$TARGET_OWNER.$$TARGET_TABLE
从中间库取数据时的设计需要在中间库数据加载不及时的情况下,从中间库的源库取数据来避免数据漏采,所以在Workflow中要设计两个Session分别能从中间库、中间库的源库抽取数据。可复用Session‘pre_s_MID’可以生成当批次的增量时间值,并根据中间库取数据的及时情况让其中一个Session空跑。
参考:文件夹000_Sample下WF_M_FOR_MID
注意:以下设计只能针对基于时间的增量。
参考复制共享对象创建‘M_GetParam_Mid’的快捷方式,复制’ re_S_MID’、’post_S_MID’
向目标库的 ETLMGR.ETL_INCR_PARAM插入所需的数据,ETL_INCR_PARAM.SESSON_NAME = S_M_TargetTable
创建Workflow时从000_Sample 复制WF_for_copy_mid进行重命名。参考添加可复用Session添加‘pre_S’,‘pre_S_MID’,‘post_S_MID’
Assignment:跟直接从源库数据不同,从中间库取数据时需要检查中间库的数据是否及时,所以要指定中间库的源表。
pre_S_M_ TargetTable:由‘pre_S’重命名而来, 属性设置与添加可复用Session一致。
pre_S_ M_ TargetTable_MID:由‘pre_S_MID’重命名而来, 属性设置与添加可复用Session一致,但是要指定两个源表的Connection分别到中间库和目标库.
post_S_ M_ TargetTable:由‘post_S_MID’ 重命名而来,属性设置与添加可复用Session一致.
S_M_TargetTable_MID:属性设置参考Session设计,源表的Connection指向中间库
S_M_TargetTable:属性设置参考Session设计,源表的Connection指向中间库的源库,可能需要向管理员申请对应Connection的执行权限。
特殊设置:’treat the input link as ’ = ‘or’
Link1: $pre_S_M_TargetTable_MID.ErrorCode <> 0
Link2: $pre_S_M_TargetTable.ErrorCode = 0
Link3: $pre_S_M_TargetTable.ErrorCode = 0
双击连线(link)可以编辑连线的条件
可参考文件夹000_Sample下WF_M_FOR_FTP的Workflow的设计
FTP Connection:在帮助文档的搜索‘FTP Connection’关键字
写数据到FTP文件时,由于目标不再是数据库,所以不需要在ETLMGR.ETL_INCR_PARAM设置增量参数的值,也不能在将运行日志写入日志表中。增量的控制一般采用sysdate(DB参数)来实现。建议每FTP文件的命名带上时间戳并且在FTP文件顺利生成后写一个标志文件来标志FTP文件顺利生成。
1) 习惯点击Ctrl+S进行Mapping的保存,避免客户端崩溃造成的不必要损失
2) 习惯性的经常去Refresh Mapping和Validate Session和Workflow,保持Session和Mapping的一致,保持Session的正确可用性
3) 下班前及在进行重大修改前对相关内容做备份,备份操作参考12章
登陆到Repository Manager
操作:选择需要备份的Workflow(结合Shift及Ctrl可多选)à右键àExport(导出)à选择保存路径并填写文件名称à点击保存按钮
上述操作会备份Workflow及Workflow所有子对象如:Session、Mapping、Source、Target等
操作:选择需要备份的Mapping(结合Shift及Ctrl可多选)à右键àExport(导出)à选择保存路径并填写文件名称à点击保存按钮
上述操作会备份Mapping及Mapping的所有子对象如: Mapping、Mapplet、Source、Target等
登陆到Repository Manager
操作:菜单RepositoryàImportant Objectà选择需要导入的XML文件,打开à选择下一步à选择需要导入的对象à选择并确认目标文件夹àImportà (有冲突时会出现)处置冲突的解决方法à下一步
Tips:在处置冲突时可对多外对象应用相几的处置方法
14?1 导入对象时处置冲突
解决方法:检查Workflow、Session的命名规范,如‘S_M_TCMS_TM_DEPARTMENT‘写成
‘s_M_TCMS_TM_DEPARTMENT‘
标签:heap 提高 wpa misc percent users rest nfa 使用
原文地址:http://www.cnblogs.com/junwangzhe/p/7064154.html