INFORMATICA 开发规范
|
目 录
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
1 编写目的
本文档旨在本次项目中实施,Informatica工具所涉及到的数据连接,命名规范和工作开发规范方面的规定和指引,统一开发习惯,以便在开发过程中能起到事半功倍的效果。
2 ETL研发运维责任人界定
1)资科内部业务数据流转,采取使用方研发原则,即谁取用数据,谁负责ETL版本研发。目标系统运维人员进行运维。
2)对于业务用户的独立管理系统,没有专门研发,由取数源端研发负责informatica 版本研发推送数据。源端系统对应运维人员负责对应workflow运维。
3 ETL 研发数据库操作约束条件
1)对于增量同步表,需要源表和目标表存在主键。
2)增量字段上,需要有索引
3)增量字段 (如时间条件,必须严格顺序进入数据库,或者增量同步完成后,严格保证增量同步的取数范围后续不会有数据进入)
同步场景 |
同步要求 |
|||
同步类型 |
源表和目标表是否存在主键或者唯一键 |
增量字段上是否有索引(源表和目标表) |
update 同步 |
delte同步 |
有标识字段增量 |
存在pk或者索引 |
需要存在索引 |
需要存在updatetime字段,并使用update字段PK 进行update 更新同步。 |
需要将删除数据写入临时表,etl同时同步临时表后将目标库对应数据删除,源端也需要进行定期清理临时表 |
源表全量读取同步 |
不存在约束或者索引 |
N/A |
N/A |
N/A |
源表全量读取同步 |
存在pk或者索引 |
N/A |
N/A |
N/A |
4 定义
序号 |
术语或缩略语 |
说明性定义 |
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 |
|
|
|
5 范围
本文档读者包括:
l 项目经理;
l 系统管理员;
l DBA管理员;
l 开发人员;
l 测试人员;
l 运维人员;
本项目需要使用到的技术:
l ETL数据整合及转换:Informatica;
l 操作系统:Linux、Windows
l 数据库:Oracle、Mysql、DB2、MS SQLServer等
6 系统通用属性
|
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. |
7 命名规则
7.1 通用规则
以下元素,数据库表,字段名称,函数名称,函数表达式,SQL语句均采用大写字母。
7.2 Connection 数据源连接
7.2.1 Connection 数据连接命名
数据链接分为源数据库链接与目标数据库链接,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操作用户。
7.2.2 数据库类型对应缩写
表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_ |
|
|
|
7.2.3 生产数据库的SID
表5-2 数据库信息表
序号 |
数据库中文名 |
数据库SID |
备注 |
1 |
阿修罗系统 |
ASURE |
|
2 |
新车辆管理系统 |
VMS |
|
3 |
短信系统 |
SMSDB |
|
4 |
|
|
|
7.3 组件命名
表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自编程组件 |
7.4 Folder/mapplet/Mapping/Session/Workflow/Schedule命名
表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 |
|
8 创建Connection连接
创建Connection由Informatica管理员完成,但在开发环境和测试中开发人员有修改Connection属性的权限。
以创建Oracle Connection“Ora_ASURE_SFMAP”为例进行说明
- 登陆到Informatica 服务器,查看对应的SID“ASURE”是否已经添加到tnsname.ora文件中,否则在tnsname.ora中添加
- 登陆到Workflow ManageràConnection(连接)àRelationalàSelect Type = “Oracle”àNew…(按钮)
8‑1 创建Connection
- 修改Connection连接的权限,登陆到Workflow ManageràConnection(连接)àRelationalàObjects:选择需要修改的Connection连接àPermission…(按钮)à修改属主。给Others组执行的权限。
8‑2 修改Connection属主
9 创建文件夹
在创建文件夹前,需要在目标数据创建用户ETLMGR,脚本在文件夹“ETLMGR”中,请按照顺序执行
9.1 创建文件夹
- 登陆Repository Manager 参考第5章的命名规则创建文件夹
操作:FolderàCreateà在弹出的对话框中输入文件夹名称
不关闭对话框进入下一步
- 选择新建文件夹的属主
9‑1 选择文件夹属主
9.2 复制共享对象
此部分操作由开发从员完成
- 登陆Repository Manager将文件夹“000_Shared”下的Mapping“M_GetParam”、 “M_getSessionRunStatus”拖拽到新建的文件夹中,并在弹出的创建快捷链接对话框选择“全部确定”。
9‑2 创建共享Mapping快捷链接
- 登陆Workflow Manager打开新建的文件夹,将文件夹“000_Shared”下的Session “pre_S”、“post_S”拖拽到新建的文件夹中,并在弹出的复制对话框选择“确定”,
9‑3 复制共享Session
然后处理Mapping冲突,为找不到的Mapping重新选择对应的快捷方式
9‑4 Mapping冲突处理
冲突处理完接提示选择下一步并确认,完成这一步骤的操作
- 登陆到Workflow Manager打开新建的文件夹,编辑“post_S”、“pre_S”源和目标的Connection(连接)
9‑5编辑“post_S”
9‑6 编辑“pre_S”
10 Mapping设计
注意1:在进行Mapping之前,需要在目标表数据库的ETLMGR.ETL_INCR_PARAM中插入对应目标表相关的信息,具体内容可能过查询ETLMGR.ETL_DICT获得帮助
注意2:ETLMGR.ETL_INCR_PARAM.TIME_BEFORE_NOW(增量结束时间与当前时间的时间差,以秒为单位)的值建议不小于300,以避免一些来不及commit的数据会丢失。
登陆到Designer,本章所述的所有操作均在Designer客户端。
10.1 导入源和目标的表结构
导入源表结构
创建源表的ODBC连接
EnableNcharSupport: 默认是不打勾的,不打勾的情况下导入char,varchar,varchar2会变成nchar,nvarchar,nvarchar2
ODBC连接只是作为导入源表和目标表的结构的媒介,不会进行实际数据的处理,实际数据的处理由服务端Connection完成
从ODBC连接中导入源表的结构
导入目标表结构
导入目标表结构与导入源表结构相似,但是要先切换到目标表的编辑窗口
10.2 Mapping设计
开发时注意查看客户端左上方的Folder显示,一定要在正确的Folder里面工作。
- 创建Mapping
展开文件夹“000_Sample”,找到Mapping“M_for_copy”并将其拖拽到目标文件夹,在弹出的对话框中选择“Yes”
- 根据第五章的命名规范重命名“M_for_copy”并添加注释
操作:菜单MappingàEdit
Comment(注释) 内容填写如下:
Create date: 日期
Create by: 用户名(现实中文名)
Desc: decription 例:用户信息交换
[
Modify Date:
Modify by: 用户
Desc: decription 例:过期用户信息不再交换
]
- 所有的Mapping都添加四个参数(Parameter),
操作:在复制Mapping的过程中已经创建
- $$INCR_START_DT STRING(20) DEFAULT: 1900-01-01 00:00:00 à增量起始时间(表示增量区间的起点)
- $$INCR_END_DT STRING(20) DEFAULT: 2900-01-01 00:00:00 à增量截至时间(表示增量区间的终点)
- $$INCR_START_ID DECIMAL(19,0) DEFAULT: 0 à增量起始主键值
- $$INCR_END_ID DECIMAL(19,0) DEFAULT: 9999999999999999999 à增量截至主键值
- Mapping具体设计参考文档《Informatica觉见场景设计》
l 在组件中创建变量时,注意选择数据类型,选择长度,在给变量赋值或将变量赋值给字段时要保持数据类型一致,不一致时要使用显式类型转换。
l 在做字符处理时,注意NULL,空字符串和空格的区别以及不同的判读和处理方式
l 不需要输出的端口不勾选OutputPort。当组件中有重名的字段时,输入的字段在原字段后加'_IN',变量的字段在原字段后加'_V',输出字段名尽量保持和下一个组件的输入字段名名称一致,以便使用按名称自动连接
l 数据加载方式:全量,增量
- 全量: Truncate & Insert
- 基于时间的增量(具体实现方案参考Informatica常见场景设计)
- 基于主键的增量(具体实现方案参考Informatica常见场景设计)
- 对于所有的Mapping要求尽量使用增量(增量区间可优先按时间确定,没有时间戳时按主键确定)
- 对于数据源表确实无法提供增量时间或主键的则全量抽取。全量抽取只适用于只适用于数据量小的表,如果数据表的数据量特别大,则需要跟需求方重新确定需求。
10.3 常用组件设计说明
l Source Qualifier 组件使用:
- 对于源系统使用nvarchar2,导入时确保在mapping中使用nstring与之匹配,这样才能确保字符传递的正确性,否则会出现乱码,字符被截断等问题
- 如果Mapping中存储存在两个及以上的Source表,同时他们来自相同的源系统,尽量使用Source Qualifier 进行关联,并在Source Qualifier中添加关联条件,而不是用Joiner控件
- 在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 组件使用:
- 对于大表(大于500000行)的连接查询一定要使用Joiner
- 使用Joiner控件时,要以小表为master表,同时要对两组数据进行排序,根据Joiner的字段进行排序,排序一定要使用同一个方式:升序或降序。此时控件中的Sorted input要打勾
l Lookup 组件使用:
- 尽量使用有连接的Lookup,降低性能风险
- Lookup中如果内部有SQL,保证SQL的字段顺序和Port的字段顺序一致
- 如果是无连接的Lookup,对于组件的命名采用LKP_返回的字段名称;如果是有连接的Lookup,如果是返回一个值,那组件的命名采用LKP_返回的字段名称,如果是多个值,那组件的命名采用LKP_被查询表名称
- 对于小表(小于500000行)的连接查询使用Lookup控件
- 对于Lookup维表查找维度ID时,需要在输出字段添加default value = -1,如下图:
- 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组件使用:
- 要求目标表有主键索引
- 将SESSION 的属性设置为UPDATE ELSE INSERT。会导致SESSION 的运行速度明显的下降,因为INFORMATICA 对每行记录都执行两个操作:更新(根据主键),如果返回的结果时更新了0 条记录,再执行一个插入操作。
- 改变这种情况的办法是,提前知道在MAPPING 中要执行的是DD_UPDATE,还是DD_INSERT,然后告诉UPDATE 控件采用什么更新策略
不能使用DD_REJECT,可以在Update Strategy组件前添加filter组件将需要做DD_REJECT的数据过滤掉
l AGGREGATOR 组件使用:
- 在使用Aggregator前,最好对数据进行排序,这样会极大提高系统性能,此时Sorted Input应该打勾
- 一个mapping中最好只用一个Aggregator 控件。要使用多个Aggregator可以考虑使用临时表把mapping拆开
- Aggregator与Lookup控件的一起使用时,每个控件都需要索引缓冲、数据缓冲并且他们共享内核里面同样的HEAP 段,这些内存区域是非常关键的,当处理的记录数量非常巨大时会引起内存的不稳定
- 当包含它的Mapping速度比较慢时,可以调整Session中的参数:
Maximum Memory Allowed For Auto Memory Attributes 512M
Maximum Percentage of Total Memory Allowed For Auto Memory Attributes 5%
Worklfow运行的时候会从他们中取小的一个值
11 Workflow设计
开发时注意查看客户端左上方的Folder显示,一定要在正确的Folder里面工作。
11‑1查看工作文件夹
Workflow设计概览:Workflow设计完成后的样子及各部分功能
11.1 创建Workflow
登陆到Repository Manager,打开目标文件夹,展开(不是打开)文件夹“000_Shared”,找到Workflow“WF_for_copy”并将其拖拽到目标文件夹,此时将会弹出一个“Copy Wizard”对话框。在冲突处置中选择“rename”并按命名规范重命名。
11‑2按命名规范重命名
11.2 Workflow属性设置
- General(通用) ,添加注释
Create date: 日期
Create by: 用户
Source table: Source table1
Source table2
……
Target table: Target table1
Target table2
……
Desc: decription 例:将广西用户信息同步到集团
[
Modify Date:
Modify by: 用户名(现实中文名)
Desc: decription 例:添加北京用户信息同步到集团
]
- Properties(属性)
- Enable HA recovery:打勾
- Automatically recover terminated task:打勾
- Maximum automatic recovery attemps:5
- Schedule
创建可复用的计划
为Workflow分配计划
11.3 添加可复用Session “pre_sql”、“post_sql”
如果在文件夹下找不到pre_S”、“post_S”,参考复制共享对象
- 将可复用Session “pre_S”、“post_S”,添加到在Workflow中, 并按命名规范重命名,如workflow名为“WF_M_CJN001”,则Session的名称分别为“pre_ S_M_CJN001”、“post_ S_M_CJN001”
11‑3 可复用Session添加到Workflow
- 修改Session “pre_sql”、“post_sql”的属性
- General属性
Failed Parent if this task failed:勾选
Treat the input link as: And
11‑4 修改General属性
- Properties属性
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_*的日志文件
11.4 编辑Assignment
设置$$TARGET_OWNER,$$TARGER_TABLE的值
$$TARGET_OWNER = 目标表的owner
$$TARGET_TABLE = 目标表名
11‑6 编辑Assignment
12 Session设计
登陆到Workflow Manager,开发时注意查看客户端左上方的Folder显示,一定要在正确的Folder里面工作。
12.1 创建Session
登陆到Workflow Manager,,打开Session放置的Workflow
在工具栏的左上角左击session创建图标后松开鼠标,然后在工作区任意位置左击一下弹出Session创建对话框,选择正确的mapping,并按照5.4规范命名
12‑1 创建Session
将Assignment、Sessionpre_S_*、新建的Session、post_S_*串联
12‑2 串联Session
12.2 必要Session属性设置
对于Session的修改和设置一定去到Session工作区设置,尽量不要在Worklet或者Workflow里面做特殊设置,比如指定表名或者指定用户名等。
12.2.1 General属性
- Failed Parent if this task failed:勾选
- Treat the input link as: And
12‑3 General属性设置
12.2.2 Property属性
- Session Log File Name:FolderName_SessionName.log,(参照样例,需要手动写入)
- Parameter Filename :
当 增量参数是由pre_S*生成的参数文件控制时:$PMRootDir/BWParam/$$PARAM_FILE (固定值)
当 增量参数不是由参数文件控制时:留空
- Treat Source Rows as, 有几种类型:1: Insert 2:Update 3:Data driven
对于目标表只有Insert的,就选择,Insert,
对于目标表中存在更新,同时没有使用UpdateStrategy控件的使用: Update
对于Mapping中使用UpdateStrategry控件的使用Data driven
- Commit Interval:默认值10000,当单次加载超过10 0000行时将值设置为100000
- Recovery Strategy:
调度增量(或者一次全量)超过500万 并且 在加载数据之前没有删除冗余数据操作的调度 选择:Resume from last checkpoint
其它:Restart task
- Enable high precision:勾选
12‑4 Properties属性设置
12.2.3 Config Object属性
- Default buffer block size
当运行速度较慢时考虑调整
Informatica用来存储数据的最小单位,默认值12KB。Information初始化Session时,对每个Session分配2个Block作为初始化分配。如果一行数据大于Block的大小时则每一行数据均要移动多个Block,影响执行效率。建议取一行数据最大值的整数倍作为Block的大小。如一行数据的大小是8KB,可以调整Default buffer block size为24KB或者16KB
- Maximum Memory Allowed For Auto Memory Attributes
512M 单次取数介于500000行到2000000
1024M 单次取数介于2000000行到5000000
- Maximum Percentage of Total Memory Allowed For Auto Memory Attributes: 10%
以上两个参数通常情况下保留缺省值即可,对于某些占用内存较大的Mapping可以考虑增大,最大不能超过1G,同时他们之中取小的值作为最终值
- Save session log for these runs:100,保存最近N次的运行日志
Tips:菜单—>TaskàSession ConfigurationàEditàPropertiesà 将Save session log for these runs 设为100
可修改整个文件夹所有session的“Save session log for these runs”的值
12.2.4 Mapping属性
12.2.4.1 Source 属性
配置源表的连接信息,包括使用的Connection(连接),源表
12‑5 设置源表的连接信息
检查源表的过滤条件(可选),默认是继承mapping中Source Qualifier 中的过滤条件一致,在session里可以进行个性化设置
12‑6 设置Source Filter
12.2.4.2 Target属性
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
- Pre Sql设置数据的重载机制,根据情况添加以下脚本
情况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
13 从中间库取数据
从中间库取数据时的设计需要在中间库数据加载不及时的情况下,从中间库的源库取数据来避免数据漏采,所以在Workflow中要设计两个Session分别能从中间库、中间库的源库抽取数据。可复用Session‘pre_s_MID’可以生成当批次的增量时间值,并根据中间库取数据的及时情况让其中一个Session空跑。
参考:文件夹000_Sample下WF_M_FOR_MID
注意:以下设计只能针对基于时间的增量。
13.1 复制共享对象
参考复制共享对象创建‘M_GetParam_Mid’的快捷方式,复制’ re_S_MID’、’post_S_MID’
13.2 Workflow设计
向目标库的 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)可以编辑连线的条件
14 写数据到FTP 文件
可参考文件夹000_Sample下WF_M_FOR_FTP的Workflow的设计
FTP Connection:在帮助文档的搜索‘FTP Connection’关键字
写数据到FTP文件时,由于目标不再是数据库,所以不需要在ETLMGR.ETL_INCR_PARAM设置增量参数的值,也不能在将运行日志写入日志表中。增量的控制一般采用sysdate(DB参数)来实现。建议每FTP文件的命名带上时间戳并且在FTP文件顺利生成后写一个标志文件来标志FTP文件顺利生成。
15 开发建议
1) 习惯点击Ctrl+S进行Mapping的保存,避免客户端崩溃造成的不必要损失
2) 习惯性的经常去Refresh Mapping和Validate Session和Workflow,保持Session和Mapping的一致,保持Session的正确可用性
3) 下班前及在进行重大修改前对相关内容做备份,备份操作参考12章
16 备份及恢复
16.1 备份
登陆到Repository Manager
- 备份Workflow
操作:选择需要备份的Workflow(结合Shift及Ctrl可多选)à右键àExport(导出)à选择保存路径并填写文件名称à点击保存按钮
上述操作会备份Workflow及Workflow所有子对象如:Session、Mapping、Source、Target等
- 备份Mapping
操作:选择需要备份的Mapping(结合Shift及Ctrl可多选)à右键àExport(导出)à选择保存路径并填写文件名称à点击保存按钮
上述操作会备份Mapping及Mapping的所有子对象如: Mapping、Mapplet、Source、Target等
- 备份其它对象,参考上述两种备份操作
16.2 恢复
登陆到Repository Manager
操作:菜单RepositoryàImportant Objectà选择需要导入的XML文件,打开à选择下一步à选择需要导入的对象à选择并确认目标文件夹àImportà (有冲突时会出现)处置冲突的解决方法à下一步
Tips:在处置冲突时可对多外对象应用相几的处置方法
14‑1 导入对象时处置冲突
17 参考文档
18 常见问题解决
解决方法:检查Workflow、Session的命名规范,如'S_M_TCMS_TM_DEPARTMENT'写成
's_M_TCMS_TM_DEPARTMENT'