此章节介绍如何通过LOAD DATA将本地数据导入GaussDB(for MySQL)。
语法
LOAD DATA LOCAL
INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
]
[LINES
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var
[, col_name_or_user_var] ...)]
参数
参数
-
file_name :要导入的本地文件的路径。
-
REPLACE | IGNORE : 指定遇到重复记录是替换还是忽略。
-
tbl_name :要导入的目标表名。
-
CHARACTER SET charset_name : 指定文件的编码,建议和GaussDB(for MySQL)实例上的编码一致,否则可能乱码。
-
FIELDS TERMINATED BY 'string' : 用来指定每列之间的分割符号,默认值为 \t 。
-
[OPTIONALLY] ENCLOSED BY 'char' : 用来忽略数据源字段中的符号。
-
LINES TERMINATED BY 'string' :可以指定行之间的换行符,默认值为 \n 。
说明有些windows上的文本文件的换行符可能为\r\n,由于是不可见字符,请仔细检查。
-
IGNORE number LINES :设置导入数据时忽略开始的某几行。
-
(column_name_or_user_var,...) :设置导入的列,如果不设置,默认按照列的顺序来导入数据。
-
更多参数参考MySQL的load data infile官方文档说明。其他参数的先后顺序不能乱,顺序参考官方说明。
标准示例
前提条件:
- 服务端必须开启local_infile开关,在目标实例的基本信息页面,进入参数修改页面里将此参数修改为ON。
- 客户端必须开启local-infile开关,在my.cnf中配置local-infile或连接数据库使用 --local-infile=1 参数。
[mysql]
local-infile
- 将本地文件qq.txt中的数据导入test表中,qq.txt文件共有5行数据,列分隔符为',',行分隔符'\n',内容如下:
1,a
2,b
3,c
4,d
5,"e"
- 创建对应表test,sql如下:
CREATE TABLE test (
`id` int NOT NULL,
`a` varchar(4) NOT NULL,
PRIMARY KEY (`id`)
);
- 在客户端中执行LOAD DATA命令将qq.txt文件中的数据导入到test表中,设置字符集为 utf8,忽略数据源字段中的双引号。
mysql> LOAD DATA LOCAL INFILE '/data/qq.txt' IGNORE INTO TABLE test CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 5 rows affected, 1 warning (0.00 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 1
mysql> select * from test;
+----+---+
| id | a |
+----+---+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
+----+---+
5 rows in set (0.00 sec)
注意
数据导入阶段会在一定程度上影响GaussDB(for MySQL)实例性能,请选择在业务低峰时间导入。
建议不要同时发起多个LOAD DATA请求。多个LOAD DATA同时进行,数据高并发写入,表锁竞争以及系统IO抢占会影响总体效率,可能会出现SQL事务超时现象,导致LOAD DATA全部失败。