首批通过分布式安全可靠测评,为关键业务系统打造
LOAD DATA
更新时间:2026-07-01 18:38:38
描述
该语句用于从外部导入数据。
目前,OceanBase 数据库当前版本不支持 LOCAL INFILE 的语法加载数据文件, 计划后续版本将支持该功能。OceanBase 数据库中的 LOAD DATA 语句仅支持加载本地直连的 OceanBase 数据库的输入文件,用户需要在导入之前将文件拷贝当前 OBServer 节点上。
说明
带有触发器(Trigger)的表禁止使用 LOAD DATA 语句。
LOAD DATA 目前可以对 CSV 格式的文本文件进行导入,整个导入的过程可以分为以下的流程:
解析文件:OceanBase 数据库会根据用户输入的文件名,读取文件中的数据,并且根据指定的并行度来决定并行或者串行解析输入文件中的数据。
分发数据:由于 OceanBase 是分布式数据库,各个分区的数据可能分布在各个不同的 OBServer,
LOAD DATA会对解析出来的数据进行计算,决定数据需要被发送到哪个 OBServer。插入数据:当目标 OBServer 收到数据后,在本地执行
INSERT操作将数据插入到对应的分区当中。
要从外部文件导入数据,您需要具有 FILE 权限。
注意
使用
REPLACE或者IGNORE子句的情况下,如果并行度大于1,发生冲突的行最后插入的记录可能与串行执行的结果不同。如果需要严格保证冲突记录的插入结果,请不要指定该语句的并行度(或将并行度设置为1)。
语法
LOAD DATA
[/*+ parallel(N) load_batch_size(M)*/]
INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE table_name
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(column_name_var
[, column_name_var] ...)]
参数解释
| 参数 | 描述 |
|---|---|
| parallel(N) | 加载数据的并行度,N 默认为 4。 |
| load_batch_size(M) | 指定每次插入的批量大小,M 默认为 1000。推荐取值范围为 [100,1000]。 |
| file_name | 定输入文件的路径和文件名,目前仅支持从 OBServer 本地加载文件。 |
| REPLACE | IGNORE | 如果遇到唯一键冲突,REPLACE 表示覆盖冲突行,IGNORE 表示忽略冲突行。 LOAD DATA 通过表的主键来判断数据是否重复,如果表不存在主键,则 REPLACE 与 IGNORE 选项没有区别。缺省时,遇到重复数据的时候,LOAD DATA 会将出现错误的数据记录到日志文件中。 |
| table_name | 导入数据的表的名称,支持分区表与非分区表。 |
| FIELDS | COLUMNS | 指定字段的格式。
|
| LINES STARTING BY | 指定行起始符。 |
| LINES TERMINATED BY | 指定行结束符。 |
| IGNORE number { LINES | ROWS } | 忽略前几行,LINES 表示文件的前几行,ROWS 表示由字段分隔符指定的前几行数据。 缺省时,会将输入文件中的字段逐个与表中的列进行对应。 如果输入文件中并没有包含所有的列,那么缺少的列按照以下的规则会被默认填充:
|
| column_name_var | 指定导入的列名。 |
示例
从外部文件导入数据。
设置全局安全路径。
obclient> SET GLOBAL secure_file_priv = "" Query OK, 0 rows affected (0.03 sec) obclinet> \q Bye说明
由于
secure_file_priv是GLOBAL变量,所以需要执行\q退出使之生效。重连数据库后,从外部文件导入数据。
obclient> LOAD DATA INFILE 'test.sql' INTO TABLE t1; Query OK, 0 rows affected