更新时间:2024-09-05 GMT+08:00
使用LOAD DATA导入本地数据
此章节介绍如何通过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全部失败。
父主题: 数据库基本使用