数据仓库服务 GAUSSDB(DWS)-使用外表功能实现GaussDB(DWS)集群间数据迁移:通过外表导入远端DWS数据

时间:2024-12-06 11:13:56

通过外表导入远端DWS数据

  1. 参见7在E CS 上连接第二套集群,其中连接地址改为第二套集群的地址,本例为192.168.0.86。
  2. 创建普通用户jim,并赋予创建外表和server的权限。FOREIGN DATA WRAPPER固定为gc_fdw。

    1
    2
    3
    CREATE USER jim WITH PASSWORD 'password';
    ALTER USER jim USEFT;
    GRANT ALL ON FOREIGN DATA WRAPPER gc_fdw TO jim;
    

  3. 切换到jim用户,创建server。

    1
    2
    3
    4
    5
    6
    7
    SET ROLE jim PASSWORD 'password';
    CREATE SERVER server_remote FOREIGN DATA WRAPPER gc_fdw OPTIONS  
       (address '192.168.0.8:8000,192.168.0.158:8000' , 
      dbname 'gaussdb',  
      username 'leo',  
      password 'password' 
    );
    
    • address:第一套集群的两个内网IP和端口,参见6获取,本例为192.168.0.8:8000,192.168.0.158:8000。
    • dbname:连接的第一套集群的数据库名,本例为gaussdb。
    • username:连接的第一套集群的用户名,本例为leo。
    • password:用户名密码。

  4. 创建外表。

    外表的字段和约束,必须与待访问表的字段和约束保持一致。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE FOREIGN TABLE region 
    ( 
        product_price                integer      ,
        product_id                   char(30)       ,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    integer        ,
        product_comment_time         date           ,
        product_comment_num          integer        ,
        product_comment_content      varchar(200)   
    ) 
    SERVER 
        server_remote 
    OPTIONS 
    ( 
        schema_name 'leo', 
        table_name 'product_info', 
        encoding 'utf8' 
    );
    
    • SERVER:上一步创建的server的名称,本例为server_remote。
    • schema_name:待访问的第一套集群的schema名称,本例为leo。
    • table_name:待访问的第一套集群的表名,参见10获取,本例为product_info。
    • encoding:保持与第一套集群的数据库编码一致,参见9获取,本例为utf8。

  5. 查看创建的server和外表。

    1
    2
    \des+ server_remote
    \d+ region
    

  6. 创建本地表。

    表的字段和约束,必须与待访问表的字段和约束保持一致。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    CREATE TABLE local_region 
    ( 
        product_price                integer        not null,
        product_id                   char(30)       not null,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    integer        ,
        product_comment_time         date           ,
        product_comment_num          integer        ,
        product_comment_content      varchar(200)        
    ) 
    
    WITH (
    orientation = column,
    compression=middle
    ) 
    DISTRIBUTE BY hash (product_id);
    

  7. 通过外表导入数据到本地表。

    1
    2
    INSERT INTO local_region SELECT * FROM region;
    SELECT * FROM local_region;
    

  8. 您也可以直接查询外表而无需将数据导入。

    1
    SELECT * FROM region;
    

support.huaweicloud.com/bestpractice-dws/dws_05_0060.html