教程指引
说明l ACCESS_KEY和SECRET_ACCESS_KEY
用户访问OBS的AK和SK,请根据实际替换。获取访问密钥的具体步骤,请参见“常见问题-通用问题”中的“如何获取Access Key ID(AK)和 Secret Access Key(SK)”
本教程旨在通过演示将样例数据上传OBS,及将OBS的数据导入进DWS上的目标表中,让您快速掌握如何从OBS导入数据到DWS集群的完整过程。
在本教程中,您将:
- 生成CSV格式的数据文件。
- 创建一个与DWS集群在同一区域的OBS存储桶,然后将数据文件上传到该存储桶。
- 创建外表,用于引流OBS存储桶中的数据到DWS集群。
- 启动DWS并创建数据库表后,将OBS上的数据导入到表中。
- 根据错误表中的提示诊断加载错误并更正这些错误。
估计时间:30分钟
准备数据源文件
- 数据文件“product_info0.csv”
100,XHDK-A,2017-09-01,A,2017 Shirt Women,red,M,328,2017-09-04,715,good! 
205,KDKE-B,2017-09-01,A,2017 T-shirt Women,pink,L,584,2017-09-05,40,very good! 
300,JODL-X,2017-09-01,A,2017 T-shirt men,red,XL,15,2017-09-03,502,Bad. 
310,QQPX-R,2017-09-02,B,2017 jacket women,red,L,411,2017-09-05,436,It's nice. 
150,ABEF-C,2017-09-03,B,2017 Jeans Women,blue,M,123,2017-09-06,120,good.
- 数据文件“product_info1.csv”
200,BCQP-E,2017-09-04,B,2017 casual pants men,black,L,997,2017-09-10,301,good quality. 
250,EABE-D,2017-09-10,A,2017 dress women,black,S,841,2017-09-15,299,This dress fits well. 
108,CDXK-F,2017-09-11,A,2017 dress women,red,M,85,2017-09-14,22,It's really amazing to buy. 
450,MMCE-H,2017-09-11,A,2017 jacket women,white,M,114,2017-09-14,22,very good. 
260,OCDA-G,2017-09-12,B,2017 woolen coat women,red,L,2004,2017-09-15,826,Very comfortable.
- 数据文件“product_info2.csv”
980,"ZKDS-J",2017-09-13,"B","2017 Women's Cotton Clothing","red","M",112,,, 
98,"FKQB-I",2017-09-15,"B","2017 new shoes men","red","M",4345,2017-09-18,5473 
50,"DMQY-K",2017-09-21,"A","2017 pants men","red","37",28,2017-09-25,58,"good","good","good" 
80,"GKLW-l",2017-09-22,"A","2017 Jeans Men","red","39",58,2017-09-25,72,"Very comfortable." 
30,"HWEC-L",2017-09-23,"A","2017 shoes women","red","M",403,2017-09-26,607,"good!" 
40,"IQPD-M",2017-09-24,"B","2017 new pants Women","red","M",35,2017-09-27,52,"very good." 
50,"LPEC-N",2017-09-25,"B","2017 dress Women","red","M",29,2017-09-28,47,"not good at all." 
60,"NQAB-O",2017-09-26,"B","2017 jacket women","red","S",69,2017-09-29,70,"It's beautiful." 
70,"HWNB-P",2017-09-27,"B","2017 jacket women","red","L",30,2017-09-30,55,"I like it so much" 
80,"JKHU-Q",2017-09-29,"C","2017 T-shirt","red","M",90,2017-10-02,82,"very good."
1.新建文本文档并使用本地编辑工具(例如Visual Studio Code)打开后,将示例数据拷贝进文本文档中。
2.选择“格式>以UTF-8无BOM格式编码”。
3.选择“文件>另存为”。
4.在弹出的对话框中输入文件名后,将文件后缀设为.csv,单击“保存”。
上传数据到OBS
1.将上面准备的3个CSV格式的数据源文件存储到OBS桶中。
a.登录OBS管理控制台。
单击“服务列表”,选择“对象存储服务”,打开OBS管理控制台页面。
b.创建桶。
例如,创建以下两个桶:“mybucket”和“mybucket02”。

注意确保这两个桶与DWS集群在同一个区域。
c.新建文件夹。
例如:
−在已创建的OBS桶“mybucket”中新建一个文件夹“input_data”。
−在已创建的OBS桶“mybucket02”中新建一个文件夹“input_data”。
d.上传文件。
例如:
−将以下数据文件上传到OBS桶“mybucket”的“input_data”目录中。
product_info0.csv 
product_info1.csv
−将以下数据文件上传到OBS桶“mybucket02”的“input_data”目录中。
product_info2.csv
2.为导入用户设置OBS桶的读取权限。
在从OBS导入数据到集群时,执行导入操作的用户需要取得数据源文件所在OBS桶的读取权限。通过配置桶的ACL权限,可以将读取权限授予指定的用户帐号。
创建外表
1.连接DWS数据库。
2.创建外表。
                  
                    说明
                    l  ACCESS_KEY和SECRET_ACCESS_KEY
用户访问OBS的AK和SK,请根据实际替换。获取访问密钥的具体步骤,请参见“常见问题-通用问题”中的“如何获取Access Key ID(AK)和 Secret Access Key(SK)”。
                    
                  
                  

DROP FOREIGN TABLE IF EXISTS product_info_ext; 
CREATE FOREIGN TABLE product_info_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/input_data/product_info | obs://mybucket02/input_data/product_info', 
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', 
FILL_MISSING_FIELDS 'true', 
IGNORE_EXTRA_DATA 'true' 
) 
READ ONLY  
LOG INTO product_info_err  
PER NODE REJECT LIMIT 'unlimited';
返回如下信息表示创建成功:
CREATE FOREIGN TABLE
执行数据导入
1.在DWS数据库中,创建一个名为product_info的表,用于存储从OBS导入的数据。
DROP TABLE IF EXISTS product_info; 
CREATE TABLE product_info 
( 
    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)      
)  
WITH ( 
orientation = column, 
compression=middle 
)  
DISTRIBUTE BY hash (product_id);
2.执行INSERT命令,通过外表product_info_ext将OBS上的数据导入到目标表product_info 中:
INSERT INTO product_info SELECT * FROM product_info_ext;
3.执行SELECT命令查询目标表product_info,查看从OBS导入到DWS中的数据。
SELECT * FROM product_info;
查询结果的结尾将显示以下信息:
(20 rows)
4.对表product_info执行VACUUM FULL。
VACUUM FULL product_info;
5.更新表product_info的统计信息。
ANALYZE product_info;
清除资源
1.如果执行了导入数据后查询数据,请执行以下命令,删除目标表。
DROP TABLE product_info;
当结果显示为如下信息,则表示删除成功。
DROP TABLE
2.执行以下命令,删除外表。
DROP FOREIGN TABLE product_info_ext;
当结果显示为如下信息,则表示删除成功。
DROP FOREIGN TABLE
