DWS最佳实践(二)DWS数据的导入方式

举报
行人忆南山 发表于 2020/05/08 11:18:54 2020/05/08
【摘要】 DWS表的导入导出方式有三种:(1)insert方式;(2)copy方式;(3)OBS和GDS方式

1.     Insert方式

(1) 插入单条数据

insert into A (col1,col2, …) values(val1,val2,…);

注:在面向分析型场景中,大多数表是基于列存进行存储,由于其底层存储方式的差异,导致单条insert方式效率低下,并且如果长时间进行单条insert插入数据,会导致严重的数据膨胀,进而严重影响查询性能,故并不推荐使用单条insert方式来进行大规模数据的导入。

(2)批量导入

insert into A (col1,col2,col3,…)values(val1,val2,val3,…),(val4,val5,val6,…),(val7,val8,val9,...);

(3)整表插入(表A和表A_temp的结构完全保持一致)

insert into A select * from A_temp;

 

2. copy方式

copy方式适合数据量写入量不大,并发度不高的场景。适用于进行微批插入。

(1)     copy元命令

copy A from stdin with(format ‘CSV’, null ‘null’,delimiter ‘|’,encoding ‘utf8’);

从标准输入中copy数据到DWS的表A,具体参数说明:

a. Format:用来指定数据格式,可以是csv或者text;

b. Null:用来指定数据文件中空值的表示;

c. Delimiter: 用来指定数据使用的分隔符;

e. Encoding: 用来指定数据使用的编码方式;

copy A to stdout with(format ‘CSV’, null ‘null’,delimiter ‘|’,encoding ‘utf8’);

从DWS表A中copy数据到标准输出,参数同上。更多参数配置请参考官网资料:

  https://support.huaweicloud.com/devg-dws/dws_04_0275.html

(2)     copyManager

将copy元命令封装在DWS的Java驱动中,可以在应用端通过调用jdbc中的copyManager的接口实现copy方式导入数据,Java的样例工程请参考官网资料:

 https://support.huaweicloud.com/devg-dws/dws_04_0853.html

 

3.     OBS外表和GDS外表导入

Insert和copy方式导入数据都只是适合单次数据量较小的场景,是个串行的过程,效率较低;如果要想大数据量的批量导入、导出DWS,需要使用到OBS或GDS工具进行导入导出,可以充分发挥分布式架构的BULKLOAD优势,快速而高效的进行并行数据传输。

以导入为例,并行导入数据通过外表设置的策略,利用多DN并行的方式,将数据从数据源文件导入到数据库中:

(1)外表Foreign Table: 用于识别数据源文件的位置,文件格式,存放位置,编码格式,数据间的分隔符等信息。是关联数据文件与数据库实表的对象。

(2)目标表:数据库中的实表。数据源文件中的数据最终导入到这些表中存储,包括行存表和列存表。

(1)创建外表示例(以OBS外表为例):

 

Create table public.test_f(   
    like public.test
)
Server gsmpp_server
Options 
(
         Encoding ‘utf8’,
         Location ‘obs://dws-demo/tpch/’,
         Format ‘csv’,
         Delimiter ‘|’,
         Access_key ‘{access_key_value}’,
         Secret_access_key ‘{secret_access_key_value}’
);

安全须知:认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

参数说明:

a. Encoding: 指定数据文件的编码格式名称;

b. Location: 外表的数据源位置,支持URL;

c. Format: 外表中数据文件的格式(text,csv);

d. Delimiter: 指定数据文件行数据字段分隔符,不指定使用默认分隔符;

e. Access_key/Secret_access_key: 用户的AK/SK,认证凭证,可在官网获取;

更多外表选项参数可以参考以下链接:

https://support.huaweicloud.com/devg-dws/sql_create_foreign_table_0001.html

2从外表导入数据到内表

insert into public.test select * from public.test_f;

 

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。