GBase 8a数据库集群,支持导出时指定行分隔符和列分隔符,如果数据中的字符和其冲突,可以考虑用多个字符做分隔符,当然也可以用不常见或冲突几率低的不可见字符做分隔符。
如果原始数据有包围符
可以通过having LINES SEPARATOR参数来加载。
数据
[root@gbase_rh7_001 gbase]# cat t2_2.txt
99,'ABCD
EFG','2021-07-07'
100,'1234
5678','2021-07-07'
[root@gbase_rh7_001 gbase]#加载效果
注意指定date_format 以及后面的enclosed by参数。
gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.101/home/gbase/t2_2.txt' into table t2 data_format 3 having LINES SEPARATOR fields terminated by ',' enclosed by '''' autofill;
Query OK, 2 rows affected (Elapsed: 00:00:01.41)
Task 9253 finished, Loaded 2 records, Skipped 0 records
gbase> select * from t2;
+------+-----------+------------+---------+----------+
| id | name | birthday | commons | loadtime |
+------+-----------+------------+---------+----------+
| 100 | 1234
5678 | 2021-07-07 | NULL | NULL |
| 99 | ABCD
EFG | 2021-07-07 | NULL | NULL |
+------+-----------+------------+---------+----------+
2 rows in set (Elapsed: 00:00:00.02)行分隔符
默认的行分隔符是换行’\n’
lines terminated by ‘\n’
其支持指定多个,比如用 ‘\n\n’ ,‘ABC\n’ 多个字符代表行分隔符,或者1到多个不可见字符 \xFF。
加载样例
表结构
四个列的varchar(10)的字段,用来测试数据中带换行符的。
gbase> create table t2(v1 varchar(10),v2 varchar(10),v3 varchar(10),v4 varchar(10));
Query OK, 0 rows affected (Elapsed: 00:00:01.48)数据
包含两行,用逗号做字段分隔符,数据中包含换行符,最多只有一个。用两个换行作为行分隔符
[gbase@rh6-1 ~]$ cat t2.txt
AA,B
B,CC,DD
AAA,BBB
B,CC
CC,DD
DD加载
正常加载入库,指定2个换行作为行分隔符。
gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.201/home/gbase/t2.txt' into table t2 fields terminated by ',' lines terminated by '\n\n';
Query OK, 2 rows affected (Elapsed: 00:00:06.80)
Task 336744 finished, Loaded 2 records, Skipped 0 records查询
查询结果和预期相符。
gbase> select * from t2 \G
*************************** 1. row ***************************
v1: AAA
v2: BBB
B
v3: CC
CC
v4: DD
DD
*************************** 2. row ***************************
v1: AA
v2: B
B
v3: CC
v4: DD
2 rows in set (Elapsed: 00:00:00.40)另一个例子
用ZTE\n做行分隔符
[gbase@rh6-1 ~]$ cat t2.txt
AA,B
B,CC,DDZTE
AAA,BBB
B,CC
CC,DD
DDZTE
[gbase@rh6-1 ~]$ gccli testdb
GBase client 8.6.2.43-R28.122445. Copyright (c) 2004-2020, GBase. All Rights Reserved.
gbase> truncate table t2;
Query OK, 2 rows affected (Elapsed: 00:00:01.40)
gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.201/home/gbase/t2.txt' into table t2 fields terminated by ',' lines terminated by 'ZTE\n';
Query OK, 2 rows affected (Elapsed: 00:00:16.80)
Task 338893 finished, Loaded 2 records, Skipped 0 records
gbase> select * from t2 \G
*************************** 1. row ***************************
v1: AA
v2: B
B
v3: CC
v4: DD
*************************** 2. row ***************************
v1: AAA
v2: BBB
B
v3: CC
CC
v4: DD
DD
2 rows in set (Elapsed: 00:00:00.10)导出样例
参数是一致的。
gbase> select * from t2 into outfile '/home/gbase/t2_out.txt' fields terminated by ',' ESCAPED BY '' lines terminated by 'ZTE\n';
Query OK, 2 rows affected (Elapsed: 00:00:00.14)
gbase> system cat /home/gbase/t2_out.txt
AA,B
B,CC,DDZTE
AAA,BBB
B,CC
CC,DD
DDZTE
gbase>总结
这里只是演示行分隔符可以用多个字符,不单单非得用\n\n, 可以用任意的组合,比如 ’ZTE\n’ 用三个字母加换行符做行分隔符,或者按全面参考的文章,不可见字符做分隔符。
导出和导入的参数是对应的。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




