GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令

來源:互聯網
上載者:User

GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令

本文主要介紹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)”;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.