• 沒有找到結果。

----结束

多表并发导出操作步骤

通过创建的两个外表,将数据库中的两个表分别导出至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。