GBase 8a数据库集群,支持导出时指定行分隔符和列分隔符,如果数据中的字符和其冲突,可以考虑用多个字符做分隔符,当然也可以用不常见或冲突几率低的不可见字符做分隔符。
目录导航
如果原始数据有包围符
可以通过having LINES SEPARATOR参数来加载。完整语法可以参考 GBase 8a 集群加载数据LOAD的方法
数据
[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。
关于不可见字符的使用,请参考 GBase 8a导出和加载使用多个不可见字符做分隔符
加载样例
表结构
四个列的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' 用三个字母加换行符做行分隔符,或者按全面参考的文章,不可见字符做分隔符。
导出和导入的参数是对应的。