在OGG中可以对源字段的内容进行合并或拆分,从而实现类似于“ETL”的功能。
strcat(s1,s2,s3,,,):用于合并字串;
strext(str, start, end):用于获取指定位置的字串。
示例如下:

源端myphone表,2个字段:
SQL> desc myphone
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 AREA_CODE                                          NUMBER
 PHONE_NO                                           NUMBER
 
目标端myphone表,只有一个字段:
SQL> desc myphone
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 PHONE_NO                                           VARCHAR2(30)
 
 
因此目标表在接收到数据之后,我们可以将2个字段合并为一个,前面加上“0”,字段间使用“-”连接,表示一个完整的电话号码。
源端OGG捕获及传输进程:
extract ext
userid ggs_owner, password ggs_owner
rmthost venom , mgrport 7809
rmttrail ./dirdat/gg
table ggs_owner.myphone;

目标端投递进程:
REPLICAT rep
sourcedefs ./dirsql/myphone.sql
USERID ggs_owner, PASSWORD ggs_owner
MAP ggs_owner.myphone, TARGET ggs_owner.myphone,
COLMAP (phone_no=@STRCAT("0",area_code,"-",phone_no));

启动两个进程并在源端插入一些数据,源端:
SQL> select * from myphone;

AREA_CODE   PHONE_NO
---------- ----------
         8   92471136
         4   17213124
         2     818188
目标端:
SQL> select * from myphone;

PHONE_NO
------------------------------
08-92471136
04-17213124
02-818188
可以看到字段已经按我们的要求进行合并。

针对字段拆分:
源端:
SQL> select * from myssid;

SSID
----------
 123456787
 123456788
 123456789

将SSID表的9位数字投递到目标端时拆分成如下格式:
SQL> select * from myssid;

SSID
--------------------
123-456-787
123-456-788
123-456-789

我们需要在目标端进程如下配置:
REPLICAT rep
sourcedefs /export/home/oracle/gg/dirsql/myssid.sql
USERID ggs_owner, PASSWORD ggs_owner
MAP ggs_owner.myssid, TARGET ggs_owner.myssid,
COLMAP (ssid=@STRCAT(@STREXT(ssid,1,3),"-",@STREXT(ssid,4,6),"-",@STREXT(ssid,7,9) ));

可以看到,使用strcat, strext可以很容易的实现在实时数据同步时,进行简单的数据转换,从而实现部分ETL功能。

GoldenGate中使用strcat和strext进行数据转换的更多相关文章

  1. 关于Oracle GoldenGate中Extract的checkpoint的理解 转载

    什么是checkpoint? 在Oracle 数据库中checkpoint的意思是将内存中的脏数据强制写入到磁盘的事件,其作用是保持内存中的数据与磁盘上的数据一致.SCN是用来描述该事件发生的准确的时 ...

  2. 模拟一下goldengate中断后,重新同步操作

    模拟一下goldengata中断后,重新同步操作:     1.关掉源端抽取进程 GGSCI (20081122-2105) 15> info all Program     Status    ...

  3. Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据

    Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据 2014-06-11 10:45:14   阅读375次 我们在JNI中处理得到的BMP图片Raw数据,我们应该如何 ...

  4. Oracle GoldenGate中HANDLECOLLISIONS参数使用详解

    Oracle GoldenGate中HANDLECOLLISIONS参数使用详解   HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...

  5. GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令

    本文主要介绍OGG中一些过滤或计算函数的用法,以及sqlexec的基本用法 SQLPREDICATE 在使用OGG初始化时,可以添加此参数到extract中,用于选择符合条件的记录,下面是OGG官方文 ...

  6. 【翻译自mos文章】在Oracle GoldenGate中循环使用ggserr.log的方法

    在OGG中循环使用ggserr.log的方法: 參考原文: OGG How Do I Recycle The "ggserr.log" File? (Doc ID 967932.1 ...

  7. C\C++ 中的 strcat() 函数 —— 字符串的插入、拼接

    转载链接:http://blog.csdn.net/smf0504/article/details/52055971 函数原型 extern char *strcat(char *dest,char ...

  8. c#中读取数据库bit布尔字段数据转换Int和bool时的错误

    数据库里bit这个布尔类型的字段,非常实用,但是在c#里读取时,许多人喜欢犯一些错误,导致运行报错. 实际中,有效的正确读取方法只有以下两种: int xxx= Convet.ToInt16(read ...

  9. java中如何将byte[]里面的数据转换成16进制字符串

    原文链接: http://zhidao.baidu.com/link?url=RmLDjr4PtP_oUE5J2pKNZSvlHt1K7HcCh4-03Y7VkXYhJ0kawg01CtKHZc2uB ...

随机推荐

  1. Hbase之更新单条数据

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...

  2. bootstrap的警告框

    .alert 基础警告框 .alert-danger  红色警告框 .alert-dismissable  修饰警告框 alert-dismiss="alert" 触发警告框 // ...

  3. SqlServer关闭与启用标识(自增长)列

    1 --添加新列 2 ALTER TABLE TABLENAME ADD ID int 3 --赋值 4 UPDATE TABLENAME SET ID = IDENTITY_ID 5 --删除标识列 ...

  4. HDUOJ-----(1162)Eddy's picture(最小生成树)

    Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. Longest Consecutive Sequence [LeetCode]

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  6. IO流--切割 合并文件

    import java.io.*; import java.util.*; public class io { public static void main(String[] args)throws ...

  7. iOS App从点击到启动

    程序启动之前 从exec()开始 main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当 ...

  8. Swift和Objective-C混编注意

    前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋们来讲,的确算是福音,但对于整个iOS编程从业者来讲 ...

  9. Java NIO框架Mina、Netty、Grizzly介绍与对比

    Mina:Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用 ...

  10. 关闭“JDK自动更新”提示