高斯数据库 (gaussDB) - 导入数据 - 通过外表并行导入(7)

示例 2 :Shared 策略导入

  1. 导入前的准备。
    假设 TEXT 格式的数据源文件“foreign_tpcds_reasons.dat.0”保存在 192.168.0.90 服
    务器上“/input_data”目录下。
    a. 在数据服务器上配置 NFS 服务。具体配置方法可以参考 SUSE DOC :管理指
    南 - 配置 NFS 服务器。
    b. 在数据服务器上启动 NFS 服务。
    service nfs start
    c. 以 root 用户在 GaussDB 200 各 DN 所在的主机创建数据文件目录上“/
    input_data”,并将数据源服务器 mount 到此目录下。
    cd /input_data
    mount -t nfs 192.168.0.90:/input_data /input_data
  2. 以 omm 用户身份登录 CN 所在服务器,执行 source ${BIGDATA_HOME}/
    mppdb/.mppdbgs_profile 命令启动环境变量。
  3. 使用如下命令连接数据库。
    gsql -d postgres -p 25308
    postgres 为需要连接的数据库名称,25308 为 CN 的端口号。
    连接成功后,系统显示类似如下信息:
gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit
1071 last mr 1373)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=#
  1. 创建导入目标表 reasons。
CREATE TABLE reasons
(
r_reason_sk integer not null,
r_reason_id char(16) not null,
r_reason_desc char(100)
);
  1. 创建外表 foreign_tpcds_reasons 用于接收数据服务器上的数据。
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/foreign_tpcds_reasons.dat.0',
format 'TEXT', mode 'shared', delimiter E'\x08', NULL '');
  1. 将数据导入 reasons。
    INSERT INTO reasons SELECT * FROM foreign_tpcds_reasons;

示例 3 :Private 策略导入

假设集群共有 4 台主机,8 个主 DN,即每个主机上有 2 个主 DN。待导入数据文件有 8
个,每个 50MB。文件格式为 CSV。
1. 以 omm 用户身份登录 CN 所在服务器,执行 source ${BIGDATA_HOME}/
mppdb/.mppdbgs_profile 命令启动环境变量。
2. 使用如下命令连接数据库。
gsql -d postgres -p 25308
postgres 为需要连接的数据库名称,25308 为 CN 的端口号。
连接成功后,系统显示类似如下信息:

gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit
1071 last mr 1373)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=#
  1. 查询各主机上的 DN 名称。
    SELECT node_name,node_host FROM pgxc_node WHERE node_type='D';
    示例:
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)
  1. 将数据源文件上传每个 DN 所在的主机。
    a. 以 root 用户登录集群的每台主机,创建数据文件存放目录“/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

b. 将数据源文件均匀分发到集群各主机上一步骤中所创建的子目录中。
c. 修改各主机上待导入数据源文件及数据文件目录“/input_data”的属主为
omm。
chown -R omm:wheel /input_data
5. 创建导入的目标表 reasons。

CREATE TABLE reasons
(
r_reason_sk integer not null,
r_reason_id char(16) not null,
r_reason_desc char(100)
);
  1. 创建外表 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。
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';
  1. 将数据导入 reasons。
    INSERT INTO reasons SELECT * FROM foreign_tpcds_reasons;
  2. 查询错误信息表 err_tpcds_reasons,处理数据加载错误。详细请参见 8.1.7 处理错误
    表。
    SELECT * FROM err_tpcds_reasons;

  
    展开阅读全文