
# LOAD DATA
#### 标准示例
LOAD DATA LOCAL INFILE '/data/data.txt' IGNORE INTO TABLE test CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\\n' (id, sid, asf);
![](https://support.huaweicloud.com/usermanual-ddm/public_sys-resources/note_3.0-zh-cn.png)
如果数据中包含一些特殊字符，比如分隔符、转义符等，建议用引号扩起来，通过OPTIONALLY ENCLOSED BY '"'指定。
示例：
下面的一段数据中包含了分隔符（,）则需要用引号括起来。
**"aab,,,bba,ddd"**
如果数据中包含了引号字符，则上述方法可能不会生效，此时可以把数据中引号字符替换成\\"。例如：**"aab,,,bba,ddd\\"ddd\\"bb,ae"**。
- 如果指定**LOCAL**关键词，则表明从客户端主机读文件。如果local没指定，出于安全考虑不支持此功能。
- 可以通过**FIELDS TERMINATED BY**指定字符之间的分隔符号，默认值为\\t 。
- 通过**OPTIONALLY ENCLOSED BY**忽略数据源字段中的符号。
- 通过**LINES TERMINATED BY** 可以指定行之间的换行符，默认为\\n。
  ![](https://support.huaweicloud.com/usermanual-ddm/public_sys-resources/note_3.0-zh-cn.png)
  有些windows上的文本文件的换行符可能为\\r\\n，由于是不可见字符，所以请小心检查。
  
- 通过**CHARACTER SET**指定文件的编码，建议跟RDS for MySQL实例上物理库（分片）的编码一致，否则可能乱码。其中字符集编码必须用引号扩起来，否则会解析出错。
- 通过**IGNORE** 或者**REPLACE**指定遇到重复记录是替换还是忽略。
- 目前列名必须指定，且必须包括分片字段，否则没办法确定路由。
- 其他参数参考MySQL的[load data infile官方文档](https://dev.mysql.com/doc/refman/8.0/en/load-data.html)说明。其他参数的先后顺序不能乱，顺序参考[官方说明](https://dev.mysql.com/doc/refman/8.0/en/load-data.html)。
![](https://support.huaweicloud.com/usermanual-ddm/public_sys-resources/notice_3.0-zh-cn.png)
1. 数据导入阶段会在一定程度上影响DDM以及RDS for MySQL实例性能，请选择在业务低峰时间导入。
2. 建议不要同时发起多个LOAD DATA请求。多个LOAD DATA同时进行，数据高并发写入，表锁竞争以及系统IO抢占会影响总体效率，可能会出现SQL事务超时现象，导致LOAD DATA全部失败。
3. 由于分布式事务的特性，使用LOAD DATA导入数据时，需要设置手动提交事务，以确保数据记录改动的准确无误。 例如客户端可进行如下设置：
   ```
   mysql> set autocommit=0; 
   mysql> LOAD DATA LOCAL INFILE '/data/data.txt' IGNORE INTO TABLE test CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' (id, sid, asf);
   mysql> commit;
   ```
   
 
#### 使用限制
- 不支持LOW_PRIORITY。
- 不支持CONCURRENT。
- 不支持PARTITION (partition_name \[, partition_name\] ...)。
- 不支持LINES STARTING BY 'string'。
- 不支持用户变量。
- ESCAPED BY 只支持'\\\\'。
- 如果导入数据时没有指定自增键的值，DDM不会填充自增值，自增能力使用的是底层DN的自增能力，因此自增值会重复。
- 如果主键或者唯一索引值经过路由后不在同一张物理表，REPLACE不生效。
- 如果主键或者唯一索引值经过路由后不在同一张物理表，IGNORE不生效。
- 不支持对含有全局二级索引的表执行LOAD DATA的操作。
 
