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端库 的列 选择,映射,转换,数据移动。