• 4.3 高级特性(3) -- 过滤


    Map HR.EMPLOYEES, Target HR.STAFF, 
    COLMAP (USEDEFAULTS, 
    WAGES = @COMPUTE(SALARY * 12));

    1. 过滤表

    (1) 使用通配符*,复制用户下所有的表

    在extract参数文件中

    Table HR.*;

    在远程replicate参数文件中

    Map HR.*, Target HR.* ; 

    (2) 过滤表

    extract参数文件

    Table HR.EMPLOYEES; 
    Table HR.JOBS;

    replicate参数文件

    Map HR.EMPLOYEES, Target HR.EMPLOYEES ; 
    Map HR.JOBS, Target HR.JOBS  

    2 过滤列

    extract参数文件

    Table HR.EMPLOYEES 
    COLS (employee_Id, first_name, last_name); 

    上面只复制COLS指定的列,目标端表不做限制,只要存在这几列即可,并且不违反约束

    如果过滤条件写在投递进程的参数文件中,则不再使用PassThru模式

    或者下面的写法

    Table HR.EMPLOYEES 
    COLSEXCEPT (email); 

    复制处email以外的所有列

    3. 过滤行

    (1)使用where子句

    extract参数:

    Table HR.EMPLOYEES, 
    WHERE (EMPLOYEE_ID < 100);

    只复制employee_id小于100的数据

    在replicate参数中加入

    Map HR.EMPLOYEES, Target HR.EMPLOYEES, 
    WHERE (JOB_ID = "IT_PROG");              ----注意:双引号

    在replicat的时候进一步过滤,只装载JOB_ID="IT_PROG"的数据

    (2)使用FILTER参数

    在ext或者rep参数中加入

    Table HR.EMPLOYEES, 
    FILTER (SALARY / 12 < 1000); 

    或者

    Map HR.EMPLOYEES, Target HR.EMPLOYEES, 
    FILTER (SALARY / 12 > 1000);

    上面只抽取或者装载月薪资大于1000 的数据

    (3)在进行delete操作的时候,只删除月薪小于1000的记录

    Table HR.EMPLOYEES, 
    FILTER (ON DELETE, SALARY / 12 < 1000); 

    (4)如果源段和目标端的表名和字段名不同

    在replicate参数中加入

    Map HR.EMPLOYEES, Target HR.STAFF, 
    COLMAP (USEDEFAULTS, 
    WAGES = SALARY); 

    说明:在replicate参数中使用ASSUMETARGETDEFS说明源段和目标端的表都一致。如果源段的表名为:EMPLOYEES 目标端的表名为:STAFF. 

    目标端表结构如下:

    Table STAFF 
    Name Null? Type 
    ----------------------------------------- -------- ---------------------------- 
    EMPLOYEE_ID (PK)                NOT NULL   NUMBER(6) 
    FIRST_NAME                            VARCHAR2(20) 
    LAST_NAME                     NOT NULL    VARCHAR2(25) 
    FULL_NAME                    NOT NULL    VARCHAR2(46) 
    EMAIL                       NOT NULL   VARCHAR2(25) 
    PHONE_NUMBER                          VARCHAR2(20) 
    HIRE_DATE                    NOT NULL    DATE 
    JOB_ID                      NOT NULL    VARCHAR2(10) 
    WAGES                             NUMBER(8,2)       ----源段字段名为:SALARY
    COMMISSION_PCT                         NUMBER(2,2) 
    MANAGER_ID                           NUMBER(6) 
    DEPARTMENT_ID                         NUMBER(4) 

     下一步,因为Source端和target端的表不一样,所以需要生成数据定义文件

    源段编辑

    GGSCI (db11) 2> edit param defgen
    
    
    defsfile ./dirdef/RHREMD1.defs
    USERID ogg, PASSWORD ogg
    TABLE HR.*; 

    执行命令:

    db11@db11  /home/oracle/ogg$ ./defgen paramfile dirprm/defgen.prm 
    
    ***********************************************************************
            Oracle GoldenGate Table Definition Generator for Oracle
          Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230
       Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 05:08:19
     
    Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
    
    
                        Starting at 2014-10-06 22:08:47
    ***********************************************************************
    
    Operating System Version:
    Linux
    Version #1 SMP Fri Jan 27 17:17:51 EST 2012, Release 2.6.18-308.el5
    Node: db11
    Machine: x86_64
                             soft limit   hard limit
    Address Space Size   :    unlimited    unlimited
    Heap Size            :    unlimited    unlimited
    File Size            :    unlimited    unlimited
    CPU Time             :    unlimited    unlimited
    
    Process id: 27974
    
    ***********************************************************************
    **            Running with the following parameters                  **
    ***********************************************************************
    defsfile ./dirdef/RHREMD1.defs
    USERID ogg, PASSWORD ***
    TABLE HR.*;
    Expanding wildcard HR.*:
    
    Retrieving definition for HR.COUNTRIES
    Retrieving definition for HR.DEPARTMENTS
    Retrieving definition for HR.EMPLOYEES
    Retrieving definition for HR.JOBS
    Retrieving definition for HR.JOB_HISTORY
    Retrieving definition for HR.LOCATIONS
    Retrieving definition for HR.REGIONS
    Retrieving definition for HR.T
    
    2014-10-06 22:09:11  WARNING OGG-00869  No unique key is defined for table 'T'. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.
    
    
    
    Definitions generated for 8 tables in ./dirdef/RHREMD1.defs

    把def文件发送到目标端的dirdef目录下

    db11@db11  /home/oracle/ogg$ scp ./dirdef/RHREMD1.defs oracle@192.168.1.3:/home/oracle/ogg/dirdef

    最后tell ogg使用defgen文件,rep参数中添加

    SourceDefs ./dirdef/RHREMD1.defs

    注释掉

    --AssumeTargetDefs

    启动进程!

    (5)接上面。使用函数

    在源段的SALARY为月薪,而目标端WAGES为年薪,在这里需要使用COMPUTE转换

    Map HR.EMPLOYEES, Target HR.STAFF, 
    COLMAP (USEDEFAULTS, 
    WAGES = @COMPUTE(SALARY * 12));

    上面使用函数COMPUTE月薪*12得到年薪

    还有在目标端FULL_NAME为FIRST_NAME和LAST_NAME组成,使用函数STRCAT进行连接

    Map HR.EMPLOYEES, Target HR.STAFF, 
    COLMAP (USEDEFAULTS, 
    WAGES = @COMPUTE(SALARY * 12) 
    FULL_NAME = @STRCAT(LAST_NAME,",",FIRST_NAME)); 

    测试,在目标端的测试结果为:

    SQL> l
      1* select first_name,last_name,full_name,employee_id,wages from t1 where employee_id=197
    SQL> /
    
    FIRST_NAME           LAST_NAME                 FULL_NAME                                          EMPLOYEE_ID      WAGES
    -------------------- ------------------------- -------------------------------------------------- ----------- ----------
    Kevin                Feeney                    Feeney,Kevin                                               197      36000
    Kevin                Feeney                                                                               197       3000

    函数说明!

  • 相关阅读:
    js中checkbox的全选和反选的实现
    【VS开发】VS2013多字节工程问题uilding an MFC project for a non-Unicode character set is deprecated
    【VS开发】VS2013多字节工程问题uilding an MFC project for a non-Unicode character set is deprecated
    【机器学习】【神经网络与深度学习】不均匀正负样本分布下的机器学习 《讨论集》
    【机器学习】【神经网络与深度学习】不均匀正负样本分布下的机器学习 《讨论集》
    【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用
    【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用
    【VS开发】cmd dos 批处理重命名文件
    【VS开发】cmd dos 批处理重命名文件
    【Python开发】【神经网络与深度学习】如何利用Python写简单网络爬虫
  • 原文地址:https://www.cnblogs.com/haoxiaoyu/p/4005468.html
Copyright © 2020-2023  润新知