● 选择MRS服务与集群节点处于联网状态,导出速率会受网络带宽影响。
● 支持数据文件格式:ORC。
导出文件命名规则
GaussDB(DWS)导出ORC数据的文件命名规则如下:
1. 导出至MRS(HDFS):从DN节点导出数据时,以segment的格式存储在HDFS 中,文件命名规则为“mpp_数据库名_模式名_表名称_节点名称_n.orc”。这里 的“n”是从0开始按照自然数0、1、2、3递增。
2. 对于来自不同集群或不同数据库的数据,建议用户可以将数据导出到不同路径 下。ORC格式文件大小最大为128M,Stripe大小最大为64M。
3. 导出完成后会生成_SUCCESS标记文件。
4.2.2 规划导出数据
MRS导出支持的数据类型请参见表3-6。
HDFS导出数据准备:HDFS导出准备即配置MRS,具体信息可参考《MapReduce服务 用户指南》。
4.2.3 创建外部服务器
HDFS创建外部服务器请参见手动创建外部服务器。
4.2.4 创建外表
当完成创建外部服务器后,在GaussDB(DWS)数据库中创建一个HDFS只写外表,用来 访问存储在HDFS上的数据。此外表是只写的,只能用于导出操作。
创建外表的语法格式如下,详细的描述请参见CREATE FOREIGN TABLE (SQL on Hadoop or OBS)。
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name
[ { [CONSTRAINT constraint_name] NULL | [CONSTRAINT constraint_name] NOT NULL | column_constraint [...]} ] |
table_constraint [, ...]} [, ...] ] ) SERVER dfs_server
OPTIONS ( { option_name ' value ' } [, ...] ) [ {WRITE ONLY }]
DISTRIBUTE BY {ROUNDROBIN | REPLICATION}
[ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ;
例如,创建一个名为"product_info_ext_obs"的外表,对语法中的参数按如下描述进行 设置:
● table_name 外表的表名。
● 表字段定义
– column_name:外表中的字段名。
– type_name:字段的数据类型。
多个字段用“,”隔开。
● SERVER dfs_server
外表的外部服务器名称,这个server必须存在。外表通过设置外部服务器连接 OBS/HDFS读取数据。
此处应参考创建外部服务器中创建的外部服务器名称填写。
● OPTIONS 参数
用于指定外表数据的各类参数,关键参数如下所示。
– “format”:表示导出的数据文件格式,支持“orc”格式。
– “foldername”:外表中数据源文件目录,即表数据目录在HDFS文件系统 上对应的文件目录。此选项对WRITE ONLY外表为必选项,对READ ONLY外 表为可选项。
– “encoding”:外表中数据源文件的编码格式名称,缺省为utf8。
– filesize
指定WRITE ONLY外表的文件大小。此选项为可选项,不指定该选项默认分 布式文件系统配置中文件大小的配置值。此语法仅对WRITE ONLY的外表有 效。
取值范围:[1, 1024]的整数。
说明
filesize参数只对ORC格式的WRITE ONLY的HDFS外表有效。
– compression
指定ORC格式文件的压缩方式,此选项为可选项。此语法仅对WRITE ONLY 的外表有效。
取值范围:zlib,snappy,lz4。缺省值为snappy。
– version
指定ORC格式的版本号,此选项为可选项。此语法仅对WRITE ONLY的外表 有效。
取值范围:目前仅支持0.12。缺省值为0.12。
– dataencoding
在数据库编码与数据表的数据编码不一致时,该参数用于指定导出数据表的 数据编码。比如数据库编码为Latin-1,而导出的数据表中的数据为UTF-8编 码。此选项为可选项,如果不指定该选项,默认采用数据库编码。此语法仅 对HDFS的WRITE ONLY外表有效。
取值范围:该数据库编码支持转换的数据编码。
说明
dataencoding参数只对ORC格式的WRITE ONLY的HDFS外表有效。
● 语法中的其他参数
其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中我们不需 要设置。详细的描述请参见CREATE FOREIGN TABLE (SQL on Hadoop or OBS)。
根据以上信息,创建外表命令如下所示:
DROP FOREIGN TABLE IF EXISTS product_info_ext_obs;
---建立不包含分区列的HDFS外表,表关联的外部服务器为hdfs_server,表对应的HDFS服务上的文件格式 为‘orc’,HDFS上的数据存储路径为'/user/hive/warehouse/product_info_orc/'。
CREATE FOREIGN TABLE product_info_ext_obs ( 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 hdfs_server OPTIONS (
format 'orc',
foldername '/user/hive/warehouse/product_info_orc/', compression 'snappy',
version '0.12' ) Write Only;
4.2.5 执行导出
操作步骤
步骤1 执行数据导出。
INSERT INTO [foreign table 表名] SELECT * FROM [源表名];
说明
● 仅支持单个内表导出,不支持多表Join联合导出,不支持单表的聚集、排序、子查询、limit 等操作结果导出。
----结束
执行导出数据示例
● 示例1:将表product_info_output的数据通过外表product_info_output_ext导出 到数据文件中。
INSERT INTO product_info_output_ext SELECT * FROM product_info_output;
若出现以下类似信息,说明数据导出成功。
INSERT 0 10
● 示例2:通过条件过滤(WHERE product_price>500),向数据文件中导出部分数 据。INSERT INTO product_info_output_ext SELECT * FROM product_info_output WHERE product_price>500;
说明
对于特殊的数据类型如RAW类型,在导出之后是一个二进制文本,导入工具无法识别。需使用 RAWTOHEX()函数将其转换为16进制文本导出。
4.3 使用 GDS 导出数据到远端服务器
4.3.1 关于 GDS 并行导出
使用GDS工具将数据从数据库导出到普通文件系统中,适用于高并发、大量数据导出 的场景。
概述
通过外表导出数据:通过GDS外表设置的导出模式、导出数据格式等信息来指定待导 出的数据文件,利用多DN并行的方式,将数据从数据库导出到数据文件中,从而提高 整体导出性能。不支持直接导出文件到HDFS文件系统。
● CN只负责任务的规划及下发,把数据导出的工作交给了DN,释放了CN的资源,
使其有能力处理外部请求。
● 通过让各个DN都参与数据导出,充分利用各个设备的计算能力及网络带宽。
图4-3 通过外表导出数据
相关概念
● 数据文件:存储有数据的TEXT、CSV或FIXED文件。文件中保存的是从 GaussDB(DWS)数据库导出的数据。
● 外表:用于规划导出数据文件的数据文件格式、存放位置、编码格式等信息。
● GDS:数据服务工具。在导出数据时,需要将此工具部署到数据文件所在的服务 器上,使DN可以通过该工具导出数据。
● 表:数据库中的表,包括行存表和列存表。数据文件中的数据从这些表中导出。
● Remote导出模式:将集群中的业务数据导出到集群之外的主机上。