ogg 对所有数据选择,映射,过滤
一般不建议在pump进程中实现数据转换,也一般在target端 实现,考虑到影响source端性能。
1 数据的选择 与 过滤: ---函数使用详见 -p102
where 选择只是基于SQL 的where操作,而filter 比where可以使用更多函数,一般filter 多余where 使用。
eg:
table <table spec>,
filter ( [,on insert | on update | on delete]
[, ignore insert |ignore update | ignore delete] ,
<filter clause>]);
map <table spec>, target <table spec>,
filter (
[, on insert | on update |on delete]
[, ignore insert | ignore update | ignore delete ]
[, raiseerror <error_num>] , <filter clause>);
FILTER 是基于数值的操作,以下情况建议使用filter 操作:
数值类型、所操作的字段包括数值、函数的返回值是数值类型、所支持的数学操作的数据类型 :+,-,*,/,\ >、>=、<、<=、<>、=、 and or 等。
2.1 当使用filter属性时,下列参数可以和 filter 一起使用。
on insert | on update | on delete 及 ignore insert |ignore update | ignore delete
2.2 当filter 发生错误时,target端使用 raiseerror 参数可以唤起用户自定义错误信息
在 filter中使用字符串需加 双引号。
eg: 调用 gg 的@compute 函数抽取价格操作 10000的记录
MAP SALES.TCUSTORD,TARGET sales.tord,
FILTER (@COMPUTE (PRODUCT_PRICE*product_amount) > 10000);
eg : 调用gg的@strfind 函数,抽取包含joe字符串 的记录。
table act.tcustord ,filter (@strfind (name ,"joe")>0);
eg : 当select 记录大于50条时,在update和delete上执行filter
TABLE ACT.TCUSTORD, FILTER (ON UPDATE,ON DELETE ,AMOUNT >50);
eg: 调用gg的@range 函数,把表拆分到两个进程中去。
(replicat group 1 parameter file)
map sales.acct,target sales.acct, filter (@range (1,2,id));
(replicat group 2 parameter file)
map sales.acct, target sales.acct ,filter(@range (2,2, id));
-----------------------------------------------------------------------------
3 列映射: ---p98 详见
OGG 支持table级别,全局级别的列映射
table-level 列映射: --需要在table 和map 中使用colmap 参数来进行映射。
3.1 source,target 端库的列名字不同。
3.2 COLMAP 参数提供从source端到 target端库 的列 选择,映射,转换,数据移动。