GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
来源:互联网 发布:阿里云 cn域名隐私 编辑:程序博客网 时间:2024/06/07 07:31
原文:http://www.cnblogs.com/quanweiru/p/4957633.html
本文主要介绍OGG中一些过滤或计算函数的用法,以及sqlexec的基本用法
SQLPREDICATE
在使用OGG初始化时,可以添加此参数到extract中,用于选择符合条件的记录,下面是OGG官方文档中的描述 :
“在用OGG初始化数据时,使用SQLPredicate是比where或filter更好的一个选项。使用此语句比其它参数初始化更快,因为它直接作用于SQL语句,告诉OGG不应该取所有数据之后再过滤(这正是其它参数的运行方式),而是应该只取需要的部分。”
如下
TABLE ggs_owner.emp_details, SQLPREDICATE “where ename=’Gavin’”;
针对目标端的数据过滤,仍然可以在replicat上使用where条件进行数据过滤,即只取extract出来的部分数据进行投递,如下:
MAP ggs_owner.emp_details, TARGET ggs_owner.emp_details, WHERE (ename=”Gavin”);
FILTER
Filter的功能远比where强大,你可以在任何有字段转换的地方使用它进行数据过滤,而where只能使用基本的操作符。比如,我们可以在OGG的这些函数(@COMPUTE, @DATE, @STRFIND, @STRNUM等)中使用数值运算符:
‘+’,’-’,’/’,’*’或比较操作符‘>’,’<', '='。
下面的配置示例中我们在extract中使用STRFIND函数,捕获ename字段中只符合相应条件的记录,配置如下:
TABLE ggs_owner.emp_details,FILTER (@STRFIND (ename, “Gavin”) > 0);
COMPUTE
接下来的示例讲解如何使用@COMPUTE函数,本示例中基于某原始字段值,计算同一张表中其它字段的值。
在本示例中的目标表EMP与源表结构不同,目标表上有多出来的一个字段COMM。COMM字段的值由源字段SAL*1.1计算得到。由于两边表结构不同,因此,我们需要先用defgen程序创建一个定义文件。
首先,我们在目标端上基于EMP表创建defgen参数文件:
edit params defgen
DEFSFILE /home/oracle/goldengate/dirsql/emp.sql
USERID ggs_owner, PASSWORD ggs_owner
TABLE ggs_owner.emp;
然后在OGG安装目录下执行:
[oracle@linux02 goldengate]$ ./defgen paramfile ./dirprm/defgen.prm
目标端的replicat参数文件定义如下,里面用到了colmap和compute。colmap中的useDefaults告诉OGG,源和目标表的字段按名称自动匹配,而目标表的comm字段,则由源端的sal字段运算得到。
REPLICAT rep1
USERID ggs_owner, PASSWORD *********
SOURCEDEFS /home/oracle/goldengate/dirsql/emp.sql
MAP ggs_owner.emp_details, TARGET ggs_owner.emp_details,
COLMAP (usedefaults,
comm= @compute(sal +sal *.10));
基于上面的配置进行数据同步测试,可以看到目标表中comm的字段值是sal字段值的1.1倍,如下:
SQL> select * from emp;
EMPNO ENAME DEPTNO SAL COMM
---------- -------------------- ---------- ---------- ----------
1001 Gavin 10 1000 1100
1002 Mark 20 2000 2200
1003 John 30 3000 3300
SQLEXEC
SQLEXEC可以在extract或replicat中用于执行SQL语句、存储过程或SQL函数。比如,针对大批量的数据加载,我们可以先将表的索引删除,待数据加载完成之后,再重建索引,从而提高数据同步的性能。在下面replicat示例中,可以看到类似的配置示例:
REPLICAT rep1
USERID ggs_owner, PASSWORD ggs_owner
ASSUMETARGETDEFS
sqlexec “drop index loc_ind”;
MAP ggs_owner.emp_details, TARGET ggs_owner.emp_details, WHERE (location=”Sydney”);
sqlexec “create index loc_ind on emp_details(location)”;
在复制端配置如下以SQL为例procedure是一样的改成过程名即可
/***
replicat repjoin
userid ddw,password ddw
sourcedefs d:\tools\GG\gg10g\dirdef\extjo.ref
reperror default,discard
discardfile D:\repjoin.dsc,append,megabytes 100
gettruncates
map ddw.a1test, target ddw.a12test,
sqlexec (id testid,
--自定义执行语句的唯一标识
query "select name,value1 from a2test where name_id=:id_param",
--:id_param为输入参数
params (id_param = NAME_ID)),
--将输入参数指定为源表中某列
如果没有输入参数则这部分改为NOPARAMS
colmap (USEDEFAULTS, name = testid.name, value1 = testid.value1);
--新的字段映射testid.name表示语句输出参数name
***/
- GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
- SQLEXEC
- GoldenGate中使用strcat和strext进行数据转换
- 使用COMPUTE和COMPUTE BY对数据进行汇总
- COMPUTE 和 COMPUTE BY
- Compute 和Compute By
- compute和compute by
- C#中DataTable中的Compute方法使用
- 【SQL*Plus】使用BREAK和COMPUTE在SQL*Plus中得到分组统计结果
- [C#]DataTable使用过程中常用的Select、Find和Compute方法
- [C#]DataTable使用过程中常用的Select、Find和Compute方法
- python3中使用map,reduce和filter
- 在Jetty9中使用HttpSessionListener和Filter
- python3中使用map,reduce和filter
- Oracle GoldenGate 中 HANDLECOLLISIONS 参数使用详解
- Oracle GoldenGate 中 HANDLECOLLISIONS 参数使用详解
- GoldenGate使用
- HBase shell scan命令中filter的使用
- 200 Number of Islands(岛屿数量)
- HDU
- knockou自定义绑定
- fping多线程
- 1041. Be Unique (20)
- GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
- db.properties 在SSM 框架中的使用
- LeetCode 541. Reverse String II
- gson 字符串转换android对象报错 Can't instantiate abstract class java.lang.ClassLoader
- I/O概述及其分类
- Xcode8 插件安装。
- 1896: 树的判定(并查集)
- 如何让{dede:channel}有子栏目显示子栏目,无子栏目不显示同级栏目
- ARM裸机开发之基于S3C2451的电子相册开发