-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 等操作结果导出。
----结束