数据仓库服务 GAUSSDB(DWS)-从GaussDB(DWS)集群导入数据到新集群:操作步骤

时间:2024-07-01 14:34:02

操作步骤

  1. 创建server。

    1
    2
    3
    4
    5
    6
    CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS 
       (address '10.180.157.231:8000,10.180.157.130:8000' ,
      dbname 'gaussdb', 
      username 'xyz', 
      password 'xxxxxx'
    );
    
    • server_remote为server名字,供外表使用。
    • address为远端集群CN的地址和端口号,如配置LVS,推荐只填写一个LVS地址,如未配置,推荐使用多个CN作为server的地址。
    • dbname为远端集群的数据库名。
    • username为连接远端集群使用的用户名,注意该用户不能为系统管理员。
    • password为连接远端集群使用的用户名的密码。

  2. 创建外表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    CREATE FOREIGN TABLE region
    (
        R_REGIONKEY INT4,
        R_NAME TEXT,
        R_COMMENT TEXT
    )
    SERVER
        server_remote
    OPTIONS
    (
        schema_name 'test',
        table_name 'region',
        encoding 'gbk'
    );
    
    • 外表的列不允许带任何约束。
    • 外表的列名和列的类型要与远端集群对应的表的列名和列的类型完全一致。
    • schema_name为远端集群对应的表所在的schema,如果该option省略,则schema_name预设该外表所在的schema。
    • table_name为远端集群对应的表所在的表名,如果该option省略,则table_name预设该外表的表名。
    • encoding为远端集群的编码,如果该option省略,则编码使用远端集群数据库的默认编码。

  3. 查看建立的外表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    \d+ region
    
                                  Foreign table "public.region"
       Column    |  Type   | Modifiers | FDW Options | Storage  | Stats target | Description
    -------------+---------+-----------+-------------+----------+--------------+-------------
     r_regionkey | integer |           |             | plain    |              |
     r_name      | text    |           |             | extended |              |
     r_comment   | text    |           |             | extended |              |
    Server: server_remote
    FDW Options: (schema_name 'test', table_name 'region', encoding 'gbk')
    FDW permition: read only
    Has OIDs: no
    Distribute By: ROUND ROBIN
    Location Nodes: ALL DATANODES
    

  4. 查看建立的server。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    \des+ server_remote
                                                                                                                                   List of foreign servers
         Name      |  Owner  | Foreign-data wrapper | Access privileges | Type | Version |
                      FDW Options                                                                                    | Description
    ---------------+---------+----------------------+-------------------+------+---------+-----------------------------------------------------------------
    -----------------------------------------------------------------------------------------------------------------+-------------
     server_remote | dbadmin | gc_fdw               |                   |      |         | (address '10.180.157.231:8000,10.180.157.130:8000', dbname 'gaussdb'
    , username 'xyz', password 'xxxxxx') |
    (1 row)
    

  5. 使用外表进行导入数据或者关联查询。

    • 导入数据。
      1
      2
      3
      4
      5
      6
      7
      CREATE TABLE local_region
      (
          R_REGIONKEY INT4,
          R_NAME TEXT,
          R_COMMENT TEXT
      );
      INSERT INTO local_region SELECT * FROM region;
      
      • 如遇到报错连接失败,请检查server的信息确认两个集群是否已经相互连通。
      • 如遇到报错表不存在,请检查外表的option信息是否正确。
      • 如遇到报错列信息不匹配,请检查外表的列信息是否与远端集群对应表的列信息是否一致。
      • 如遇到报错版本不一致,请升级低版本的集群在继续使用。
      • 如遇到乱码,请检查数据源的实际编码方式,并重新创建外表指定正确的编码。
    • 关联查询。
      1
      SELECT * FROM region, local_region WHERE local_region.R_NAME = region.R_NAME;
      
      • 外表可以当做一个本地表来使用,执行复杂的作业。
      • 如果远端集群已经有统计信息,请对该外表执行analyze以获得更优的执行计划。
      • 如果本地集群的DN数量比远端集群的DN数量少,本地集群需要使用SMP来获得更佳的性能。

  6. 删除外表。

    1
    DROP FOREIGN TABLE region;
    

support.huaweicloud.com/migration-dws/dws_15_0040.html