-执行导 出数 据。
在创建好外表后,通过INSERT语句,
将数据快速、高效地导出到数据文件 中。
详细内容请参见执行导出数据。
-停止GDS。 数据导出完成后,停止GDS。
详细请参见停止GDS。
-4.3.2 规划导出数据
操作场景
使用GDS从集群导出到数据之前,要提前准备需要导出的数据,并规划导出的路径。
规划导出路径
● Remote模式
步骤1 以root用户登录GDS数据服务器,创建导出的数据文件存放目录“/output_data”。
mkdir -p /output_data
步骤2 (可选)创建用户及所属的用户组。此用户为启动GDS的用户,该用户需要拥有导出 数据文件存放目录的写权限。
groupadd gdsgrp
useradd -g gdsgrp gdsuser
若出现以下提示,说明数据库用户及所属用户组已存在,可跳过本步骤。
useradd: Account 'gdsuser' already exists.
groupadd: Group 'gdsgrp' already exists.
步骤3 修改数据文件目录属主为gdsuser。
chown -R gdsuser:gdsgrp /output_data
----结束
4.3.3 安装配置和启动 GDS
GDS是GaussDB(DWS)提供的数据服务工具,通过和外表机制的配合,实现数据的高 速导出。
详细内容请参见安装配置和启动GDS。
4.3.4 创建 GDS 外表
操作步骤
步骤1 根据规划导出数据中规划的路径确定外表参数location的值。
● Remote模式
请通过URL方式设置参数“location”,用于指定导出的数据文件存放路径。
不需要指定文件 示例:
GDS数据服务器IP为192.168.0.90,假定启动GDS时设置的监听端口为5000,设置 的导出后文件存放目录为“/output_data/”。
根据以上情况,在创建外表时,指定参数“location”为“gsfs://
192.168.0.90:5000/”。
说明
– location可以指定子目录如"gsfs://192.168.0.90:5000/2019/11/"实现同一张表根据日期 导出到不同目录下。
– 现有版本在执行导出任务的时候会判断"/output_data/2019/11" 目录是否存在,不存 在则创建。导出时会将文件写入此目录下, 这样用户在创建或修改外表后就不需要再 去手动执行“mkdir -p /output_data/2019/11”。
步骤2 梳理待导出数据的格式信息,确定创建外表时使用的数据格式参数的值。格式参数详 细介绍,请参见数据格式参数。
步骤3 根据前面步骤确定的参数,创建GDS外表。外表的创建语法以及详细使用,请参考 CREATE FOREIGN TABLE (GDS导入导出)。
----结束
示例
● 示例:创建GDS导出外表foreign_tpcds_reasons,待导出数据格式为CSV,用于接 收数据服务器上的数据。
其中设置的导出模式信息如下所示:
规划数据服务器与集群处于同一内网,数据服务器IP为192.168.0.90,待导出的数 据文件格式为CSV,选择并行导出模式为Remote模式。
假定启动GDS时,规划导出的数据文件存放目录为“/output_data/”,GDS监听 端口为5000,所以设置参数“location”为“gsfs://192.168.0.90:5000/”。
设置导出的数据格式信息,参数设置如下所示:
– 导出数据文件格式(format)为CSV。
– 编码格式(encoding)为UTF-8。
– 字段分隔符(delimiter)为0x08。
– 引号字符(quote)为0x1b。
– 数据文件中空值(null)为没有引号的空字符串。
– 逃逸字符(escape)默认和quote相同。
– 数据文件是否包含标题行(header)为默认值false,即导出时数据文件第一 行被识别为数据。
– 导出数据文件换行符样式(EOL)为0X0A。
创建的外表如下所示:
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 'gsfs://192.168.0.90:5000/', FORMAT 'CSV',
DELIMITER 0x08, QUOTE E'\x1b', NULL '', EOL '0x0a' )WRITE ONLY;
4.3.5 执行导出数据
前提条件
需要确保每一个CN和DN所在服务器到GDS服务器的IP和端口是互通的。
操作步骤
步骤1 执行数据导出。
INSERT INTO [foreign table 表名] SELECT * FROM [源表名];
说明
● 编写批处理任务脚本,实现并发批量导出数据。并发量视机器资源使用情况而定。可通过几 个表测试,监控资源利用率,根据结果提高或减少并发量。常用资源监控命令有:内存和 CPU监控top命令,IO监控命令iostat,网络监控命令sar等。相关案例请参见示例:多线程导 出。
● 仅支持单个内表导出,不支持多表Join联合导出,不支持单表的聚集、排序、子查询、limit 等操作结果导出。
----结束
任务示例
● 示例1:将表reasons的数据通过外表foreign_tpcds_reasons导出到数据文件中。
INSERT INTO foreign_tpcds_reasons SELECT * FROM tpcds.reason;
● 示例2:通过条件过滤(r_reason_sk =1),向数据文件中导出部分数据。
INSERT INTO foreign_tpcds_reasons SELECT * FROM tpcds.reason WHERE r_reason_sk=1;
● 示例3:对于特殊的数据类型如RAW类型,在导出之后是一个二进制文本,导入 工具无法识别。需使用RAWTOHEX()函数将其转换为16进制文本导出。
INSERT INTO foreign_blob_type_tab SELECT RAWTOHEX(c) FROM blob_type_tab;
4.3.6 停止 GDS
GDS是GaussDB(DWS)提供的数据服务工具,通过和外表机制的配合,实现数据的高 速导出。
详细内容请参见停止GDS。