GaussDB(DWS) GDS单文件并发导入
【摘要】 GaussDB(DWS) GDS在8.1版本中支持对一个文件进行并发导入,提升单文件的导入速率。原理:约束:1.仅支持text和csv文件2.文件被拆分的总数小于等于8。3.当前分片小于等于文件被拆分的总数– 创建目标表。postgres=# CREATE TABLE pipegds_widetb_1 (city integer, tel_num varchar(16), card_code...
GaussDB(DWS) GDS在8.1版本中支持对一个文件进行并发导入,提升单文件的导入速率。
原理:
约束:
1.仅支持text和csv文件,且CSV文件需要尽量保证每行数据只有一个换行。下面的示例对这种场景进行了说明。
2.文件被拆分的总数小于等于8。
3.当前分片小于等于文件被拆分的总数
– 创建目标表。
postgres=# CREATE TABLE pipegds_widetb_1 (city integer, tel_num varchar(16), card_code varchar(15), phone_code vcreate table pipegds_widetb_3 (city integer, tel_num varchar(16), card_code varchar(15), phone_code varchar(16), region_code varchar(6), station_id varchar(10), tmsi varchar(20), rec_date integer(6), rec_time integer(6), rec_type numeric(2), switch_id varchar(15), attach_city varchar(6), opc varchar(20), dpc varchar(20));
– 创建带有file_sequence字段的外表。
postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_1( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-1’);
postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_2( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-2’);
postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_3( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-3’);
postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_4( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-4’);
postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_5( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-5’);
–将wide_tb.txt并发导入到pipegds_widetb_1。
lel on
postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_1;
postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_2;
postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_3;
postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_4;
postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_5;
\parallel off
*注意
使用CSV格式进行并行导入时,在如下示例场景中会因为CSV本身的规则和GDS拆分逻辑冲突而导致其中的某些分片导入失败。
场景:csv文件中包含未转义的换行符,且该换行符被quote指定的字符所包含,并且该行数据处于逻辑分片的第一行。
示例:并行导入一个文件big.csv ,正确导入显示内容如下:
1111,"aaaaaa","bbbbbbbb" 2222,"ccccccccc"," ddddddd dd" 33333,"eeeeeeee","ffffffffffffff"
文件被拆分成两份后,第一个分片显示内容如下:
1111,"aaaaaa","bbbbbbbb" 2222,"ccccccccc"," d
第二个分片显示内容如下:
dddddd dd" 33333,"eeeeeeee","ffffffffffffff"
因为第二个分片第一行ddddd后面的换行符包含在一个双引号之间,导致GDS无法分辨该换行符是字段中的换行符还是行中的分割符,因此第一个分片会成功导入两条数据,第二个分片导入失败。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)