• 沒有找到結果。

根据规划准备 OBS 存储位置和 OBS 桶的写权限

-4.1.2 导出 CSV,TXT 数据到 OBS

4.1.2.1 规划导出数据 操作场景

在OBS上规划导出数据存放的位置。

规划 OBS 存储位置和文件

导出数据需要指定数据在OBS中的存储路径(需指定到目录),导出的数据可以按CSV 解析格式保存到文件中。系统还支持TEXT类型的解析格式,将数据导出保存便于导入 不同的应用程序。

导出路径的目标目录中不能存在任何文件。

规划 OBS 桶权限

在导出数据时,执行导出操作的用户需要具备以下条件:

● 已开通OBS服务。

● 具备数据导出路径所在的OBS桶的写入权限。

通过配置桶的ACL权限,可以将写入权限授予指定的用户帐号。

具体操作请参见根据规划准备OBS存储位置和OBS桶的写权限。

规划导出数据和外表

提前在数据库的表中准备好待导出的数据,且单行数据大小需要小于1GB。根据导出 数据,规划匹配用户数据的外表,外表的字段、字段类型以及长度等属性需要能够对 应用户数据。

根据规划准备 OBS 存储位置和 OBS 桶的写权限

步骤1 创建OBS桶,并在OBS桶中新建文件夹作为导出数据的存放目录。

1. 登录OBS管理控制台。

单击“服务列表”,选择“对象存储服务”,打开OBS管理控制台页面。

2. 创建桶。

如何创建OBS桶,具体请参见《对象存储服务控制台指南》中的创建桶章节。

例如,创建桶:“mybucket”。

3. 新建文件夹。

在OBS桶中,创建导出数据的存放目录。

具体请参见《对象存储服务控制台指南》中的新建文件夹章节。

例如,在已创建的OBS桶“mybucket”中新建一个文件夹“output_data”。

步骤2 获取新建文件夹的OBS路径。

在创建外表时需要指定导出数据文件的OBS存放目录的路径,用于创建外表时location 参数设置。

location参数中OBS文件夹的路径由“obs://”、桶名和文件路径组成,即为:obs://

<bucket_name>/<file_path>/

例如,在本例中,location参数中OBS文件夹路径为:

obs://mybucket/output_data/

说明

执行数据导出的时候,导出数据文件的OBS存放目录的路径必须为空。

步骤3 为导出用户设置OBS桶的写权限。

在导出数据时,执行导出操作的用户需要具备数据导出路径所在的OBS桶的写入权 限。通过配置桶的ACL权限,可以将写入权限授予指定的用户帐号。

具体请参见《对象存储服务控制台指南》中的配置桶ACL章节。

----结束

4.1.2.2 创建 OBS 外表

操作步骤

步骤1 根据规划导出数据中规划的路径,由此确定创建外表时使用的参数location的值。

步骤2 用户获取OBS访问协议对应的AK值和SK值。

获取访问密钥,请登录管理控制台,单击右上角的用户名并选择菜单“我的凭证”,

然后在左侧导航树单击“管理访问密钥”。在访问密钥页面,可以查看已有的访问密 钥ID(即AK),如果要同时获取AK和SK,可以单击“新增访问密钥”创建并下载访问 密钥。

步骤3 梳理待导出数据的格式信息,确定创建外表时使用的数据格式参数的值。详细使用请 参见数据格式参数。

步骤4 根据前面步骤确定的参数,创建OBS外表。外表的创建语法以及详细使用,请参考 CREATE FOREIGN TABLE (OBS导入导出)。

----结束

示例

例如,在GaussDB(DWS)数据库中,创建一个外表。设置的参数信息如下所示:

location

在规划导出数据中,通过获取数据源文件的OBS路径,我们已经获取到数据源文 件的OBS路径。

因此,设置参数“location”为:

location 'obs://mybucket/output_data/',

● 访问秘钥(AK和SK)

– 用户获取OBS访问协议对应的AK值(access_key)。

– 用户获取OBS访问协议对应的SK值 (secret_access_key)。

说明

用户在创建用户时已经获取了access_key和secret_access_key的密钥,请根据实际密钥替 换示例中的内容。

● 设置数据格式参数

– 数据源文件格式(format)为CSV。

– 编码格式(encoding)为UTF-8。

– 是否使用加密(encrypt),默认为 'off'。

– 字段分隔符(delimiter)为','。

header(指定导出数据文件是否包含标题行)

指定导出数据文件是否包含标题行,标题行一般用来描述表中每个字段的信 息。

OBS导出数据时不支持该参数为ture,使用缺省值false,不需要设置,表示 导出的数据文件第一行不是标题行(即表头)。

根据以上信息,创建的外表如下所示:

DROP FOREIGN TABLE IF EXISTS product_info_output_ext;

CREATE FOREIGN TABLE product_info_output_ext ( product_price integer not null, product_id char(30) not null, 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 gsmpp_server

OPTIONS(

location 'obs://mybucket/output_data/', FORMAT 'CSV' ,

DELIMITER ',', encoding 'utf8', header 'false',

ACCESS_KEY 'access_key_value_to_be_replaced',

SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )WRITE ONLY ;

返回如下信息表示创建成功:

CREATE FOREIGN TABLE

4.1.2.3 执行导出

操作步骤

步骤1 执行数据导出。

INSERT INTO [foreign table 表名] SELECT * FROM [源表名];

说明

● 仅支持单个内表导出,不支持多表Join联合导出,不支持单表的聚集、排序、子查询、limit 等操作结果导出。

----结束