---
title: "LOAD DATA - OceanBase 数据库 V4.3.2 | OceanBase 文档中心"
description: LOAD DATA 描述 该语句用于从外部导入数据。 注意 带有触发器（Trigger）的表禁止使用 LOAD DATA 语句。 要从外部文件导入数据，您需要具有 FILE 权限及以下设置： 加载服务器端文件时，需要提前设置系统变量 secure_file_priv ，配置导入或导出文件时可以访问的路径。 加载客户端…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.2

# LOAD DATA

更新时间：2025-05-07 10:31:45

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.2/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/5900.load-data-of-mysql-mode.md)  

## 描述

该语句用于从外部导入数据。

#### 注意

- 带有触发器（Trigger）的表禁止使用 `LOAD DATA` 语句。
 - 要从外部文件导入数据，您需要具有 `FILE` 权限及以下设置：
     - 加载服务器端文件时，需要提前设置系统变量 [secure_file_priv](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001052763)，配置导入或导出文件时可以访问的路径。
     - 加载客户端本地文件时，需要在启动 MySQL/[OBClient](https://www.oceanbase.com/softwarecenter-cloud) 客户端时添加 `--local-infile[=1]` 选项来启用从本地文件系统加载数据的功能。

OceanBase 数据库 `LOAD DATA` 语句支持加载以下输入文件：

- 服务器端（OBServer 节点）文件：文件位于 OceanBase 数据库的 OBServer 节点上。可以使用 `LOAD DATA INFILE` 语句，将服务器端文件中加载数据到数据库表中。
 - 客户端（本地）文件：文件位于客户端本地文件系统中。可以使用 `LOAD DATA LOCAL INFILE` 语句，将客户端本地文件中的数据加载到数据库表中。

  #### 说明

  OceanBase 数据库在执行 `LOAD DATA LOCAL INFILE` 命令时，系统会自动添加 `IGNORE` 选项。
 - OSS 文件：文件位于 OSS 文件系统。可以使用 `LOAD DATA REMOTE_OSS INFILE` 语句，将 OSS 文件中的数据加载到数据库表中。

`LOAD DATA` 目前可以对 CSV 格式的文本文件进行导入，整个导入的过程可以分为以下的流程：

1. 解析文件：OceanBase 数据库会根据用户输入的文件名，读取文件中的数据，并且根据指定的并行度来决定并行或者串行解析输入文件中的数据。
 2. 分发数据：由于 OceanBase 是分布式数据库，各个分区的数据可能分布在各个不同的 OBServer 节点，`LOAD DATA` 会对解析出来的数据进行计算，决定数据需要被发送到哪个 OBServer 节点。
 3. 插入数据：当目标 OBServer 节点收到数据后，在本地执行 `INSERT` 操作将数据插入到对应的分区当中。

## 语法

```sql
LOAD DATA
    [/*+ PARALLEL(N) [load_batch_size(M)] [APPEND | direct(bool, int, [load_mode])] */]
    [REMOTE_OSS | LOCAL] 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] ...)]

load_mode:
    'full'
    | 'inc_replace'

```

## 参数解释

| 参数 | 描述 |
| --- | --- |
| parallel(N) | 加载数据的并行度，`N` 默认为 `4`。 |
| load_batch_size(M) | 指定每次插入的批量大小，`M` 默认为 `100`。推荐取值范围为 [100,1000]。 |
| APPEND \| direct() | 使用 Hint 启用旁路导入功能。   #### 注意    在执行旁路导入任务的过程中，不建议同时进行 OceanBase 数据库的升级操作，因为这可能导致旁路导入任务失败。    - `APPEND` Hint 默认等同于使用的 `direct(true, 0)`，同时可以实现在线收集统计信息（`GATHER_OPTIMIZER_STATISTICS` Hint）的功能。 - `direct()` 参数解释如下：      - `bool`：表示写入的数据是否需要排序，`true` 表示需要排序，`false` 表示不需要排序。     - `int`：表示最大容忍的错误行数。     - `load_mode`：可选参数，表示旁路导入的模式。取值须使用英文单引号包起来，取值如下：            - `full`：默认值，表示全量导入。           - `inc`：表示增量导入，支持 `INSERT` 和 `IGNORE` 语义。           - `inc_replace`：表示增量导入，但不检查主键是否重复，相当于 `REPLACE` 语义的增量导入。               #### 注意                当 `load_mode` 取值为 `inc_replace` 时，`LOAD DATA` 语句中不允许有 `REPLACE` 或 `IGNORE` 关键字。   更多使用 `LOAD DATA` 旁路导入的信息，参见 [使用 LOAD DATA 语句旁路导入数据/文件](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049873)。 |
| REMOTE_OSS \| LOCAL | 可选项，   - `REMOTE_OSS` 用于指定是否从 OSS 文件系统读取数据。     #### 注意      如果使用了此参数，`file_name` 必须是一个 OSS 的地址。 - `LOCAL` 用于指定是否从客户端的本地文件系统读取数据。如果不使用 `LOCAL` 参数，那么将从服务器端（OBServer 节点）的文件系统读取数据。 |
| file_name | 指定输入文件的路径和文件名。 `file_name` 有以下格式：   - 导入文件在 OBServer 节点或客户端：`/$PATH/$FILENAME`。 - 导入文件在 OSS 上：`oss://$PATH/$FILENAME/?host=$HOST&access_id=$ACCESS_ID&access_key=$ACCESSKEY`。   参数解释如下：   - `$PATH`：指定了存储桶中的文件路径，表示文件所在的目录。 - `$FILENAME`：指定了文件的名称，表示要访问的具体文件。 - `$HOST`：指定了 OSS 服务的主机名或 CDN 加速的域名，即要访问的 OSS 服务的地址。 - `$ACCESS_ID`：指定了访问 OSS 服务所需的 Access Key ID，用于身份验证。 - `$ACCESSKEY`：指定了访问 OSS 服务所需的 Access Key Secret，用于身份验证。    #### 说明    在导入 OSS 上的文件时，需要确保以下信息：    - 确保访问 OSS 存储桶和文件的权限。你需要拥有足够的权限来读取指定的存储桶和文件。这通常需要在 OSS 控制台或通过 OSS API 设置访问权限，并将访问密钥（Access Key ID 和 Access Key Secret）配置为具有适当权限的凭据。 - 确保数据库服务器可以通过网络连接到指定的 `$HOST` 地址，以访问 OSS 服务。如果使用的是 OSS 服务的 CDN 加速域名，还需要确保 CDN 配置正确，并且网络连接正常。 |
| REPLACE \| IGNORE | 如果遇到唯一键冲突，`REPLACE` 表示覆盖冲突行，`IGNORE` 表示忽略冲突行。`LOAD DATA` 通过表的主键来判断数据是否重复，如果表不存在主键，则 `REPLACE` 与 `IGNORE` 选项没有区别。缺省时，遇到重复数据的时候，`LOAD DATA` 会将出现错误的数据记录到日志文件中。   #### 注意    - 在 MySQL 模式中执行 `LOAD DATA LOCAL INFILE` 命令时，系统会自动添加 `IGNORE` 选项。这种行为提供了与 MySQL 数据库更好的兼容性。 - 使用 `REPLACE` 或者 `IGNORE` 子句的情况下，如果并行度大于 `1`，发生冲突的行最后插入的记录可能与串行执行的结果不同。如果需要严格保证冲突记录的插入结果，请不要指定该语句的并行度（或将并行度设置为 `1`）。 |
| table_name | 导入数据的表的名称，支持分区表与非分区表。 |
| FIELDS \| COLUMNS | 指定字段的格式。   - `ENCLOSED BY`：设置导出值的修饰符。 - `TERMINATED BY`：设置导出列的结束符。 - `ESCAPED BY`：设置导出值忽略的字符。 |
| LINES STARTING BY | 指定行起始符。 |
| LINES TERMINATED BY | 指定行结束符。 |
| IGNORE number { LINES \| ROWS } | 忽略前几行，`LINES` 表示文件的前几行，`ROWS` 表示由字段分隔符指定的前几行数据。缺省时，会将输入文件中的字段逐个与表中的列进行对应。如果输入文件中并没有包含所有的列，那么缺少的列按照以下的规则会被默认填充：   - 字符类型：空字符串。 - 数值类型：0。 - 日期类型：`0000-00-00`。 |
| column_name_var | 指定导入的列名。 |

### 注意事项

#### 进行旁路导入时的通配符规则

`LOAD DATA` 语句中，使用 `Hint direct` 指明是否进行旁路导入。在进行旁路数据导入时，来源于云对象存储服务（OSS）的文件只能指定一个；若需导入多个文件，必须分别使用多条 `load data` 语句。对于存储于集群内文件系统（server_disk）的数据文件，为便于多文件导入，引入文件通配符功能，适用于 server_disk 和 OSS 类型的文件源，不适用于客户端磁盘（client_disk）。

**集群内文件系统（server_disk）旁路导入使用方法**

- server_disk 示例：

     - 匹配文件名：`load data /*+ parallel(20) direct(true, 0) */ infile '/xxx/test.*.csv' replace into table t1 fields terminated by '|';`
     - 匹配目录：`load data /*+ parallel(20) direct(true, 0) */ infile '/aaa*bb/test.1.csv' replace into table t1 fields terminated by '|';`
     - 同时匹配目录和文件名：`load data /*+ parallel(20) direct(true, 0) */ infile '/aaa*bb/test.*.csv' replace into table t1 fields terminated by '|';`
 - server_disk 注意事项：

     - 必须存在至少一个匹配的文件，否则报错 `OB_FILE_NOT_EXIST`。
     - 对 `load data /*+ parallel(20) direct(true, 0) */ infile '/xxx/test.1*.csv,/xxx/test.6*.csv' replace into table t1 fields terminated by '|';` 的输入，`/xxx/test.1*.csv,/xxx/test.6*.csv` 会被认为是整体匹配，若无匹配则报错 `OB_FILE_NOT_EXIST`。
     - 只支持 POSIX 的 GLOB 函数能支持的通配符，例如 `test.6*(6|0).csv` 和 `test.6*({0.csv,6.csv}|.csv)` 尽管可通过 `ls` 命令查找，但 GLOB 函数无法匹配，会报 `OB_FILE_NOT_EXIST`。

**云对象存储服务（OSS）旁路导入使用方法**

- oss 示例：

     - 匹配文件名：`load data /*+ parallel(20) direct(true, 0) */ remote_oss infile 'oss://xxx/test.*.csv?host=xxx&access_id=xxx&access_key=xxx' replace into table t1 fields terminated by '|';`
 - oss 注意事项：

     - 不支持目录匹配。例如：`load data /*+ parallel(20) direct(true, 0) */ remote_oss infile 'oss://aa*bb/test.*.csv?host=xxx&access_id=xxx&access_key=xxx' replace into table t1 fields terminated by '|';` 会返回 `OB_NOT_SUPPORTED`。
     - 文件名通配符只支持 `*` 和 `?`。其他通配符虽然允许输入，但无法匹配任何结果。

更多信息，参见[使用 LOAD DATA 语句旁路导入数据/文件](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049873)

## 示例

#### 说明

`LOAD DATA` 加载数据时支持使用 `\N` 代表 `NULL`。

### 从服务器端文件导入数据

示例 1：服务器端文件导入数据。

1. 设置全局安全路径。

   ```shell
   obclient> SET GLOBAL secure_file_priv = "/"
   Query OK, 0 rows affected
   obclinet> \q
   Bye

   ```

   #### 说明

   由于 `secure_file_priv` 是 `GLOBAL` 变量，所以需要执行 `\q` 退出使之生效。
 2. 重连数据库后，从外部文件导入数据。

   ```shell
   obclient> LOAD DATA INFILE 'test.sql' INTO TABLE t1;
   Query OK, 0 rows affected

   ```

示例 2：使用 `APPEND` Hint 启用旁路导入功能。

```shell
LOAD DATA /*+ PARALLEL(4) APPEND */
   INFILE '/home/admin/a.csv'
   INTO TABLE t;

```

示例 3：使用 `direct(bool, int)` Hint 启用旁路导入功能，旁路导入文件可在 oss 上。

```shell
load data /*+ parallel(1) direct(false,0)*/ remote_oss infile 'oss://antsys-oceanbasebackup/backup_rd/xiaotao.ht/lineitem2.tbl?host=***.oss-cdn.***&access_id=***&access_key=***' into table lineitem fields terminated by '|' enclosed by '' lines starting by '' terminated by '\n';

```

### 从客户端（本地）文件导入数据

示例 4：使用以下语句，从本地文件导入数据至 OceanBase 数据库表中。

1. 打开终端或命令提示符窗口，并输入以下命令来启动客户端。

   ```shell
   obclient --local-infile -hxxx.xxx.xxx.xxx -P2881 -uroot@mysql001 -p****** -A -Dtest

   ```

   返回结果如下：

   ```shell
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 3221719526
   Server version: OceanBase 4.2.2.0 (r100000022023121309-f536833402c6efe9364d5a4b61830a858ef24d82) (Built Dec 13 2023 09:58:18)

   Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

   obclient [test]>

   ```

   #### 注意

   为了使用 `LOAD DATA LOCAL INFILE` 功能，请使用 V2.2.4 或之后的版本的 OBClient 客户端。如果您没有要求版本的 OBClient 客户端，也可以使用 MySQL 客户端来连接数据库。
 2. 在客户端中，执行 `LOAD DATA LOCAL INFILE` 语句来加载本地数据文件。

   ```shell
   obclient [test]> LOAD DATA LOCAL INFILE '/home/admin/test_data/tbl1.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',';

   ```

   返回结果如下：

   ```shell
   Query OK, 3 rows affected
   Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

   ```

### 从 OSS 文件导入数据

#### 注意

使用对象存储路径时，对象存储路径的各项参数由 `&` 符号进行分隔，请确保您输入的参数值中仅包含英文字母大小写、数字、`\/-_$+=` 以及通配符。如果您输入了上述以外的其他字符，可能会导致设置失败。

使用 `direct(bool, int)` Hint 启用旁路导入功能，导入文件可在 OSS 上。

```shell
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 ',';

```

## 相关文档

- 更多有关连接 OceanBase 数据库的信息，请参见 [连接方式概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001050312)。
 - 更多有关使用 `LOAD DATA` 语句的示例信息，请参见 [使用 LOAD DATA 语句导入数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049863)。
 - 更多有关使用 `LOAD DATA` 旁路导入的示例信息，请参见 [使用 LOAD DATA 语句旁路导入数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049873)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
