目 录html
Informatica开发规范.... 1java
目 录.... 2mysql
1 编写目的.... 4sql
2 ETL研发责任人界定.... 4数据库
3 ETL 研发数据库操做约束条件.... 4编程
4 定义.... 4服务器
5 范围.... 5session
6 系统通用属性.... 6oracle
7 命名规则.... 6app
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、DB二、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'