基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
LOAD DATA
更新时间:2026-07-15 22:01:31
描述
该语句用于从外部导入数据。
OceanBase 数据库中的 LOAD DATA 语句支持加载 OSS 和 OBServer 节点上的 OceanBase 数据库的输入文件。
说明
- OceanBase 数据库当前版本暂不支持使用
LOCAL INFILE语法加载数据文件。 - 带有触发器(Trigger)的表禁止使用
LOAD DATA语句。
LOAD DATA 目前可以对 CSV 格式的文本文件进行导入,整个导入的过程可以分为以下的流程:
解析文件:OceanBase 数据库会根据用户输入的文件名,读取文件中的数据,并且根据指定的并行度来决定并行或者串行解析输入文件中的数据。
分发数据:由于 OceanBase 是分布式数据库,各个分区的数据可能分布在各个不同的 OBServer 节点,
LOAD DATA会对解析出来的数据进行计算,决定数据需要被发送到哪个 OBServer 节点。插入数据:当目标 OBServer 节点收到数据后,在本地执行
INSERT操作将数据插入到对应的分区当中。
要从外部文件导入数据,您需要具有 FILE 权限。您可以使用 GRANT FILE ON *.* TO $user_name; 语句进行授权,其中,$user_name 是需要执行 LOAD DATA 命令的用户。
语法
LOAD DATA
[ [/*+ PARALLEL(N) load_batch_size(M) APPEND */]
| [/*+ PARALLEL(N) direct(bool, int) */] ]
[REMOTE_OSS] INFILE 'file_name'
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 默认为 100。推荐取值范围为 [100,1000]。 |
| APPEND | 使用 Hint 启用旁路导入功能,即支持直接在数据文件中分配空间并写入数据。APPEND Hint 默认等同于使用的 direct(true, 0),同时可以实现 在线收集统计信息(GATHER_OPTIMIZER_STATISTICS Hint)的功能。 |
| direct | 使用 Hint 启用旁路导入。direct(bool, int) 中的 bool参数表示给定的 CSV 文件是否需要排序,true 表示需要排序;int 表示最大容忍的错误行数。 |
| REMOTE_OSS | 可选项,用于指定是否从 OSS 文件系统读取数据。
注意如果使用了此参数, |
| file_name | 指定输入文件的路径和文件名。 file_name 有以下格式:
说明在导入 OSS 上的文件时,需要确保以下信息:
|
| table_name | 导入数据的表的名称,支持分区表与非分区表。 |
| FIELDS | COLUMNS | 指定字段的格式。
|
| LINES STARTING BY | 指定行起始符。 |
| LINES TERMINATED BY | 指定行结束符。 |
| IGNORE number { LINES | ROWS } | 忽略前几行,LINES 表示文件的前几行,ROWS 表示由字段分隔符指定的前几行数据。 缺省时,会将输入文件中的字段逐个与表中的列进行对应。 如果输入文件中并没有包含所有的列,那么缺少的列按照以下的规则会被默认填充:
|
| column_name_var | 指定导入的列名。 |
示例
示例一:从服务器端(OBServer 节点)文件导入数据
设置全局安全路径。
注意
由于安全原因,设置系统变量
secure_file_priv时,只能通过本地 Socket 连接数据库执行修改该全局变量的 SQL 语句。更多信息,请参见 secure_file_priv。obclient> SET GLOBAL secure_file_priv = "/";退出登录。
说明
由于
secure_file_priv是GLOBAL变量,所以需要执行\q退出使之生效。obclinet> \q返回结果如下:
Bye重连数据库后,使用
LOAD DATA语句导入数据。普通导入。
obclient> LOAD DATA INFILE '/home/admin/test.csv' INTO TABLE t1;使用
APPENDHint 启用旁路导入。LOAD DATA /*+ PARALLEL(4) APPEND */ INFILE '/home/admin/test.csv' INTO TABLE t1;
示例二:从 OSS 文件导入数据
注意
使用对象存储路径时,对象存储路径的各项参数由 & 符号进行分隔,请确保您输入的参数值中仅包含英文字母大小写、数字、\/-_$+= 以及通配符。如果您输入了上述以外的其他字符,可能会导致设置失败。
使用 direct(bool, int) Hint 启用旁路导入功能,导入文件可在 OSS 上。
LOAD DATA /*+ direct(true,1024) parallel(16) */ REMOTE_OSS INFILE 'oss://antsys-oceanbasebackup/backup_rd/xiaotao.ht/lineitem2.tbl?host=***.oss-cdn.***&access_id=***&access_key=***' INTO TABLE tbl1 FIELDS TERMINATED BY ',';
相关文档
- 更多有关使用
LOAD DATA语句的示例信息,请参见 使用 LOAD DATA 语句导入数据。 - 更多有关使用
LOAD DATA旁路导入的示例信息,请参见 使用 LOAD DATA 语句旁路导入数据。