----结束
多表并发导出操作步骤
通过创建的两个外表,将数据库中的两个表分别导出至OBS的桶中。
步骤1 用户通过管理控制台登录到OBS数据服务器。在OBS数据服务器上,分别创建数据文 件存放的两个桶“/input-data1”“/input-data2”,并创建每个桶下面的data目录
“/input-data1/data”“/input-data2/data”。
步骤2 在GaussDB(DWS)数据库上,创建外表tpcds.customer_address_ext1和 tpcds.customer_address_ext2分别用于OBS服务器接收导出的数据。
规划OBS与集群处于同一区域,需要导出的表为已存在的表tpcds.customer_address和 tpcds.customer_demographics。
其中设置的导出信息如下所示:
● 由于OBS服务器上的数据源文件存放目录为“/input-data1/data/ ”和/input-data2/data/ ,所以设置tpcds.customer_address_ext1参数“location”为
“obs://input-data1/data/ ”,设置tpcds.customer_address_ext2参数
“location”为“ obs://input-data2/data/”。
设置的数据格式信息是根据表从GaussDB(DWS)中导出时需要的详细数据格式参数信 息指定的,参数设置如下所示:
● 数据源文件格式(format)为CSV。
● 编码格式(encoding)为UTF-8。
● 字段分隔符(delimiter)为E'\x08'。
● 是否使用加密(encrypt),默认为 'off'。
● 用户获取OBS访问协议对应的AK值(access_key )。(必选)
● 用户获取OBS访问协议对应的SK值(secret_access_key)。(必选)
说明
用户在创建用户是已经获取了access_key和secret_access_key的密钥,请根据实际密钥替 换示例中的内容。
根据以上信息,创建的外表如下所示:
CREATE FOREIGN TABLE tpcds.customer_address_ext1 (ca_address_sk integer ,
ca_address_id char(16) ,
ca_street_number char(10) ,
)SERVER gsmpp_server
OPTIONS(LOCATION 'obs://input-data1/data/', FORMAT 'CSV',
ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off',
ACCESS_KEY 'access_key_value_to_be_replaced',
SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only;
CREATE FOREIGN TABLE tpcds.customer_address_ext2 (ca_address_sk integer , )SERVER gsmpp_server
OPTIONS(LOCATION 'obs://input_data2/data/', FORMAT 'CSV',
ENCODING 'utf8', DELIMITER E'\x08', QUOTE E'\x1b', ENCRYPT 'off',
ACCESS_KEY 'access_key_value_to_be_replaced',
SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only;
步骤3 在GaussDB(DWS)数据库上,将数据表 tpcds.customer_address和 tpcds.warehouse 并发导出到外表tpcds.customer_address_ext1和tpcds.customer_address_ext2中。
INSERT INTO tpcds.customer_address_ext1 SELECT * FROM tpcds.customer_address;
INSERT INTO tpcds.customer_address_ext2 SELECT * FROM tpcds.warehouse;
----结束
4.1.3 导出 ORC 数据到 OBS
4.1.3.1 规划导出数据
OBS导出数据准备:请参见规划导出数据完成OBS导出数据准备。
OBS导出支持的数据类型请参见表3-6。
HDFS导出数据准备:HDFS导出准备即配置MRS,具体信息可参考《MapReduce服务 用户指南》。
4.1.3.2 创建外部服务器
OBS创建外部服务器请参见创建外部服务器。
HDFS创建外部服务器请参见手动创建外部服务器。
4.1.3.3 创建外表
当完成创建外部服务器后,在GaussDB(DWS)数据库中创建一个OBS/HDFS只写外 表,用来访问存储在OBS/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读取数据。
此处应填写为参照9.2.3创建外部服务器创建的外部服务器名称。
● OPTIONS 参数
用于指定外表数据的各类参数,关键参数如下所示。
– “format”:表示导出的数据文件格式,支持“orc”格式。
– “foldername”:必选参数。外表中数据源文件目录。OBS:数据源文件的 OBS路径,此处仅需要填写“/桶名/文件夹目录层级/”,不包括OBS服务的 终端节点(Endpoint)。HDFS:HDFS文件系统上的路径。此选项对WRITE 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外表有效。
● 语法中的其他参数
其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中我们不需 要设置。
根据以上信息,创建外表命令如下所示:
DROP FOREIGN TABLE IF EXISTS product_info_ext_obs;
---建立不包含分区列的OBS外表,表关联的外部服务器为obs_server,表对应的OBS服务上的文件格式为
‘orc’,OBS上的数据存储路径为'/mybucket/data/'。
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 obs_server
OPTIONS ( format 'orc',
foldername '/mybucket/demo.db/product_info_orc/', compression 'snappy',
version '0.12' ) Write Only;
4.1.3.4 执行导出
操作步骤
步骤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.2 导出 ORC 数据到 MRS
4.2.1 导出 ORC 数据概述
GaussDB(DWS)数据库支持通过HDFS外表导出ORC格式数据至MRS,通过外表设置的 导出模式、导出数据格式等信息来指定导出的数据文件,利用多DN并行的方式,将数 据从GaussDB(DWS)数据库导出到外部,存放在HDFS文件系统上,从而提高整体导出 性能。
● CN只负责任务的规划及下发,把数据导出的工作交给了DN,释放了CN的资源,
使其有能力处理外部请求。
● 通过让各个DN都参与数据导出,充分利用各个设备的计算能力及网络带宽。
● 支持多个hdfs server并发导出,导出的路径可以为空,命名规则需与导出文件一 致。
● 选择MRS服务与集群节点处于联网状态,导出速率会受网络带宽影响。
● 支持数据文件格式:ORC。