云数据库 GAUSSDB-示例3:Private策略导入

时间:2024-01-23 20:09:29

示例3:Private策略导入

假设集群共有4台主机,8个主DN,即每个主机上有2个主DN。待导入数据文件有8个,每个50MB。文件格式为 CS V。
  1. 使用如下命令连接数据库。
    gsql -d postgres -p 8000

    postgres为需要连接的数据库名称,8000为CN的端口号。

    连接成功后,系统显示类似如下信息:

    gsql (( GaussDB  Kernel VxxxRxxxCxx build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131)
    Non-SSL connection (SSL connection is recommended when requiring high-security)
    Type "help" for help.
    
    postgres=# 
  2. 查询各主机上的DN名称。
    1
    postgres=# SELECT node_name,node_host FROM pgxc_node WHERE node_type='D';
    

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    postgres=# SELECT node_name,node_host FROM pgxc_node WHERE node_type='D';
      node_name   |   node_host    
    --------------+----------------
     dn_6001_6002 | 192.168.0.11
     dn_6003_6004 | 192.168.0.11
     dn_6005_6006 | 192.168.0.12
     dn_6007_6008 | 192.168.0.12
     dn_6009_6010 | 192.168.0.13
     dn_6011_6012 | 192.168.0.13
     dn_6013_6014 | 192.168.0.14
     dn_6015_6016 | 192.168.0.14
    (8 rows)
    
  3. 将数据源文件上传每个DN所在的主机。
    1. 以普通用户登录集群的每台主机,创建数据文件存放目录“/input_data”,以及以该主机上“DN名称”命名的子目录。

      3.查询各主机上的DN名称。所查到的IP为“192.168.0.11”的节点为例,创建数据存放目录。根据上一步骤查询所得,该节点上存在2个DN,名称分别为“dn_6001_6002”和“dn_6003_6004”。

      mkdir -p /input_data
      mkdir -p /input_data/dn_6001_6002
      mkdir -p /input_data/dn_6003_6004
    2. 将数据源文件均匀分发到集群各主机上一步骤中所创建的子目录中。
    3. 修改各主机上待导入数据源文件及数据文件目录“/input_data”的属主为omm
      chown -R omm:dbgrp /input_data
  4. 创建导入的目标表reasons。
    1
    2
    3
    4
    5
    6
    postgres=# CREATE TABLE reasons
    (
      r_reason_sk integer not null,
      r_reason_id char(16) not null,
      r_reason_desc char(100)
    );
    
  5. 创建外表foreign_tpcds_reasons用于接收数据。

    其中设置的导入模式信息如下所示:

    • 导入模式为Private模式。
    • 由于数据源文件存放在集群节点上以DN名命令的文件夹下,可以以本地文件方式访问,所以设置参数“location”为“file:///input_data/*”。

    设置的数据格式信息是根据导出时设置的详细数据格式参数信息指定的,参数设置如下所示:

    • 数据源文件格式(format)为CSV。
    • 字段分隔符(delimiter)为逗号。
    • 引号字符(quote)为0x1b。
    • 数据文件中空值(null)为没有引号的空字符串。

    设置的导入容错性如下所示:

    • 允许出现的数据格式错误个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。
    • 将数据导入过程中出现的数据格式错误信息( LOG INTO error_table_name)写入表err_tpcds_reasons。
    1
    2
    3
    4
    5
    6
    7
    postgres=# CREATE FOREIGN TABLE foreign_tpcds_reasons
    (
      r_reason_sk integer not null,
      r_reason_id char(16) not null,
      r_reason_desc char(100)
    ) 
     SERVER gsmpp_server OPTIONS (location 'file:///input_data/*', format 'CSV', mode 'private', delimiter ',', quote E'\x1b', null '')LOG INTO err_tpcds_reasonS PER NODE REJECT LIMIT 'unlimited';
    
  6. 将数据导入reasons。
    1
    postgres=# INSERT INTO reasons SELECT * FROM foreign_tpcds_reasons;
    
  7. 查询错误信息表err_tpcds_reasons,处理数据加载错误。详细请参见处理错误表
    1
    postgres=# SELECT * FROM err_tpcds_reasons;
    
support.huaweicloud.com/devg-v1-gaussdb/gaussdb_devg_0198.html