---
title: "增量旁路导入 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 增量旁路导入 当表中已有数据，想要导入增量数据时，可选择增量旁路导入功能来完成。虽然通过全量旁路导入能够导入增量数据，但是通过全量旁路导入来导入增量数据的过程将重写所有的原始数据，导入性能不佳。增量旁路导入功能与全量旁路导入不同的是，导入流程将只会操作增量数据，能够保证导入性能。 本文介绍如何通过 LOAD DATA…
---
切换语言

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

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

# 增量旁路导入

更新时间：2026-03-15 10:36:58

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/620.obap/300.obap-data-collection/300.obap-import-data/20.bypass-import/300.incremental-bypass-import.md)  

当表中已有数据，想要导入增量数据时，可选择增量旁路导入功能来完成。虽然通过全量旁路导入能够导入增量数据，但是通过全量旁路导入来导入增量数据的过程将重写所有的原始数据，导入性能不佳。增量旁路导入功能与全量旁路导入不同的是，导入流程将只会操作增量数据，能够保证导入性能。

本文介绍如何通过 `LOAD DATA` 语句、`INSERT INTO SELECT` 语句和 `CREATE TABLE AS SELECT` 语句实现增量旁路导入。

## 注意事项

在使用旁路导入时，有以下注意事项：

- 增量旁路导入的数据会触发转储，对于数据量较小且能在分钟内完成导入的情况，不建议使用增量旁路导入。
 - 增量旁路导入支持目标表有非唯一局部索引。
 - `LOAD DATA` 语句支持在多行事务中运行，在执行时会主动提交之前的事务。
 - 使用 `INSERT INTO SELECT` 语句旁路导入数据时，只支持 PDML（Parallel Data Manipulation Language，并行数据操纵语言），非 PDML 不能用旁路导入。
 - 在 `LOAD DATA` 语句和 `INSERT INTO SELECT` 语句中使用指定分区旁路导入时需要注意，目标表不能是复制表，且不能含有自增列、标识列、Global Index。
 - 对于 V4.3.5 版本，从 V4.3.5 BP1 版本开始增量旁路导入有以下变更：

     - 如果目标表最后一级分区为 Hash/Key 分区，支持分区级旁路导入。
     - 仅支持堆表加一个局部唯一索引的场景，如果目标表存在多个局部唯一索引或全局唯一索引，导入操作将失败。
     - `LOAD DATA`/`INSERT INTO SELECT` 语句中，存在多个导入任务有重合分区时，不支持分区并行导入；无重合分区时，支持分区并行导入。
     - 当 Session 级变量 [foreign_key_checks](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478639) 取值为 False 时，旁路导入操作不会进行外键约束校验。

## 使用 LOAD DATA 语句旁路导入数据

`LOAD DATA` 语句通过使用 `DIRECT()` Hint 来执行增量旁路导入，在未指定 Hint 时能基于配置项 [default_load_mode](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478927) 确定导入数据的行为。

### 使用限制

- 在导入过程中无法同时执行两个写操作语句（即不能同时写一个表），因为导入过程中会先加表锁，并且整个导入过程中只能进行读操作。
 - 不支持在触发器（Trigger）使用。
 - 不支持含有生成列的表（某些索引会产生隐藏生成列，例如 KEY `idx_c2` (`c2`(16)) GLOBAL）。
 - 不支持单行超过 2M 的数据导入。
 - 不支持 Liboblog 和闪回查询（Flashback Query）。
 - 有外键的表不支持增量旁路导入。

### 使用语法

```sql
LOAD DATA /*+ [DIRECT(need_sort,max_error,{'inc'|'inc_replace'})] parallel(N) */ [REMOTE_OSS | LOCAL] INFILE 'file_name' INTO TABLE table_name [PARTITION(PARTITION_OPTION)] [COMPRESSION]...

```

更多 `LOAD DATA` 语法的信息，请参见 [LOAD DATA](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479542)。

**参数解释：**

| 参数 | 描述 |
| --- | --- |
| DIRECT() | 使用 Hint 启用旁路导入功能。`DIRECT()` 参数解释如下：   - `need_sort`：表示写入的数据是否需要排序，值为 `bool` 类型：      - `true`：表示需要排序。     - `false`：表示不需要排序。    #### 说明      在有序文件和备份数据（已按主键排序）导入的场景中，可设置 `need_sort` 的取值为 `false` 跳过排序流程；若数据未按主键排序且未显式开启排序（`need_sort` 的取值为 `true`）时，会触发错误。 - `max_error`：表示最大容忍的错误行数。值为 `INT` 类型，超过这个数值导入任务执行会失败。 - `inc\|inc_replace`：表示增量旁路导入的两种模式，取值须使用英文单引号包起来。      - `inc`：表示增量导入，检查主键是否重复，支持 `INSERT` 和 `IGNORE` 语义。     - `inc_replace`：表示增量导入，但不检查主键是否重复，相当于 `REPLACE` 语义的增量导入。    #### 注意    当 `load_mode` 取值为 `inc_replace` 时，`LOAD DATA` 语句中不允许有 `REPLACE` 或 `IGNORE` 关键字。 |
| parallel(N) | 必填项，加载数据的并行度，默认为 4。 |
| REMOTE_OSS \| LOCAL | 可选项，   - `REMOTE_OSS` 用于指定是否从对象存储上读取数据。目前支持的对象存储包括阿里云 OSS、AWS S3 以及兼容 S3 的对象存储，如 OBS、GCS、COS 等。 - `LOCAL` 用于指定是否从客户端的本地文件系统读取数据。 - 如果不使用 `REMOTE_OSS` 和 `LOCAL`，那么将从服务器端（OBServer 节点）的文件系统读取数据。 |
| file_name | 指定输入文件的路径和文件名。该参数格式与 `REMOTE_OSS \| LOCAL` 的类型相互对应：   - 当指定 `REMOTE_OSS` 时，`file_name` 表示导入文件在对象存储上，常见支持的对象存储格式如下：      - **阿里云 OSS**：`LOAD DATA /*+ [APPEND \| DIRECT(need_sort,max_error)] parallel(N) */ REMOTE_OSS INFILE 'oss://$PATH/$FILENAME/?host=$HOST&access_id=$ACCESS_ID&access_key=$ACCESS_KEY' INTO TABLE table_name ...;`     - **AWS S3**：`LOAD DATA /*+ [APPEND \| DIRECT(need_sort,max_error)] parallel(N) */ REMOTE_OSS INFILE 's3://$PATH/$FILENAME/?host=$HOST&access_id=$ACCESS_ID&access_key=$ACCESS_KEY&s3_region=S3_REGION' INTO TABLE table_name ...;`     - **兼容 S3 的对象存储**：`LOAD DATA /*+ [APPEND \| DIRECT(need_sort,max_error)] parallel(N) */ REMOTE_OSS INFILE 's3://$PATH/$FILENAME/?host=$HOST&access_id=$ACCESS_ID&access_key=$ACCESS_KEY' INTO TABLE table_name ...;` - 当指定 `LOCAL` 时，表示导入文件在客户端上，此时语法格式为 `LOAD DATA /*+ [APPEND \| DIRECT(need_sort,max_error)] parallel(N) */ REMOTE_OSS INFILE '/$PATH/$FILENAME' INTO TABLE table_name ...;`。 - 当 `REMOTE_OSS` 和 `LOCAL` 均不指定时，表示导入文件在 OBServer 节点上，此时语法格式同仅指定 `LOCAL` 时一样。  对于上述各参数的解释如下：   - `$PATH`：指定了存储桶中的文件路径，表示文件所在的目录。 - `$FILENAME`：指定了文件的名称，表示要访问的具体文件。 - `$HOST`：指定了 OSS 服务的主机名或 CDN 加速的域名，即要访问的 OSS 服务的地址。 - `$ACCESS_ID`：指定了访问 OSS 服务所需的 Access Key ID，用于身份验证。 - `$ACCESSKEY`：指定了访问 OSS 服务所需的 Access Key Secret，用于身份验证。 - `S3_REGION`：指定了 Amazon S3 存储桶所在的区域。对象存储为 AWS S3 时，必须指定的参数。    #### 说明    在导入 OSS 上的文件时，需要确保以下信息：    - 确保访问 OSS 存储桶和文件的权限。你需要拥有足够的权限来读取指定的存储桶和文件。这通常需要在 OSS 控制台或通过 OSS API 设置访问权限，并将访问密钥（Access Key ID 和 Access Key Secret）配置为具有适当权限的凭据。 - 确保数据库服务器可以通过网络连接到指定的 `$HOST` 地址，以访问 OSS 服务。如果使用的是 OSS 服务的 CDN 加速域名，还需要确保 CDN 配置正确，并且网络连接正常。 |
| table_name | 导入数据的表的名称，支持指定表任意列数目。 |
| PARTITION_OPTION | 指定分区旁路导入时的分区名：   - partition_option_list：一级分区列表，同时插入多个分区时以逗号（,）分隔。 - subpartition_option_list：二级分区列表，同时插入多个分区时以逗号（,）分隔。 |
| COMPRESSION | 指定压缩文件格式，取值有   - `AUTO`：根据文件名后缀自动探测压缩算法。     在使用 `AUTO` 参数时，不同的后缀名有对应的压缩格式。      - `.gz`：对应 GZIP 压缩文件。     - `.deflate`：对应 DEFLATE 压缩文件。     - `.zst/.zstd`：对应 ZSTD 压缩文件。 - `NONE`：表示文件没有压缩。 - `GZIP`：GZIP 压缩文件。 - `DEFLATE`：不带元数据的GZIP压缩文件。 - `ZSTD`：ZSTD 压缩文件。  可以明确文件的压缩格式或者让程序根据文件名后缀来探测压缩格式。 |

#### 说明

`LOAD DATA` 语句中增量旁路导入和全量旁路导入一样，也支持通配符方式多文件导入数据。但 `LOAD DATA` 语句的通配符只在 OBServer 本机生效（其他机器上登录 OBServer 使用 `LOAD DATA` 通配符不生效）。

### 使用示例

LOAD DATA 语句中增量旁路导入的操作步骤与全量旁路导入的步骤一样，只需要将 `full` 字段的取值替换为 `inc` 或 `inc_replace` 即可。

#### 说明

下面的示例是从服务器端文件导入数据的方法。OceanBase 数据库 `LOAD DATA` 语句旁路导入数据还支持加载本地文件（`LOCAL INFILE`）的方式。更多有关 `LOAD DATA LOCAL INFILE` 的示例信息，请参见 [使用 `LOAD DATA` 语句导入数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475841)

     MySQL 模式   Oracle 模式

1. 登录到需要连接 OBServer 节点所在的机器上，在 `/home/admin` 目录下创建测试数据 `tbl1`。

   #### 说明

   OceanBase 数据库中的 `LOAD DATA` 语句仅支持加载 OBServer 节点本地的输入文件。因此，需要在导入之前将文件拷贝到某台 OBServer 上。

   ```shell
   [xxx@xxx /home/admin]# ssh admin@10.10.10.1

   ```

   ```shell
   [admin@xxx /home/admin]# vi tbl1.csv
   1,11
   2,22
   3,33

   ```
 2. 设置导入的文件路径。

   设置系统变量 `secure_file_priv`，配置导入或导出文件时可以访问的路径。

   #### 注意

   由于安全原因，设置系统变量 `secure_file_priv` 时，只能通过本地 Unix Socket 连接数据库执行修改该全局变量的 SQL 语句。更多信息，请参见 [secure_file_priv](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478743)。

      1. 登录到需要连接 OBServer 节点所在的机器上。

        ```
      2. 执行以下命令，通过本地 Unix Socket 连接方式连接租户 `mysql001`。

        ```shell
        obclient -S /home/admin/oceanbase/run/sql.sock -uroot@mysql001 -p******

        ```
      3. 设置导入路径为 `/home/admin`。

        ```shell
        obclient [(none)]> SET GLOBAL secure_file_priv = "/home/admin";
        Query OK, 0 rows affected

        ```
 3. 重新连接数据库后，使用 `LOAD /*+ DIRECT */ DATA` 语句导入数据。

      1. 创建表 `tbl1`。

        ```shell
        obclient [test]> CREATE TABLE tbl1 (
                            col1 INT PRIMARY KEY,
                            col2 INT
                         )
                         PARTITION BY RANGE (col1)
                            SUBPARTITION BY RANGE (col1) (
                               PARTITION p0 VALUES LESS THAN (100) (
                                     SUBPARTITION p0_1 VALUES LESS THAN (50),
                                     SUBPARTITION p0_2 VALUES LESS THAN (100)
                               ),
                               PARTITION p1 VALUES LESS THAN (200) (
                                     SUBPARTITION p1_1 VALUES LESS THAN (150),
                                     SUBPARTITION p1_2 VALUES LESS THAN (200)
                               )
                         );
        Query OK, 0 rows affected

        ```
      2. 查询表 `tbl1` 是否有数据，此时显示表为空。

        ```shell
        obclient [test]> SELECT * FROM tbl1;
        Empty set

        ```
      3. 使用旁路导入将 `tbl1.csv` 文件中的数据导入到表 `tbl1`。

             - 指定表 `tbl1` 的所有列导入数据。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',';
              Query OK, 3 rows affected
              Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

              ```
             - 指定表 `tbl1` 的指定任意列导入数据。例如指定 `col1`，`col2` 列。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ','(col1,col2);
              Query OK, 3 rows affected
              Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

              ```
             - （可选）指定表 `tbl1` 的一级分区导入数据。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl1 partition(p0, p1)  FIELDS TERMINATED BY ',';

              ```
             - （可选）指定表 `tbl1` 的二级分区导入数据。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl1 partition(p0sp0_1, p1sp1_1)  FIELDS TERMINATED BY ',';

              ```
             - 使用配置项 `default_load_mode` 导入数据。

                     1. 设置 `default_load_mode` 的值为 `INC_DIRECT_WRITE` 或 `INC_REPLACE_DIRECT_WRITE`。

                       ```shell
                       obclient [test]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE';

                       ```
                     2. 不指定 `LOAD DATA` 语句的 Hint。

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

                       ```
      4. 验证表 `tbl1` 中是否已导入数据。

        ```shell
        obclient [test]>  SELECT * FROM tbl1;

        ```

        查询结果如下：

        ```shell
         +------+------+
         | col1 | col2 |
         +------+------+
         |    1 |   11 |
         |    2 |   22 |
         |    3 |   33 |
         +------+------+
         3 rows in set

        ```

        结果显示表 `tbl2` 中已导入数据。

   ```

        ```
      2. 执行以下命令，通过本地 Unix Socket 连接方式连接租户 `oracle001`。

        ```shell
        obclient -S /home/admin/oceanbase/run/sql.sock -usys@oracle001 -p******

      1. 创建表 `tbl2`。

        ```shell
        obclient [test]> CREATE TABLE tbl2 (
                            col1 INT PRIMARY KEY,
                            col2 INT
                         )
                         PARTITION BY RANGE (col1)
                            SUBPARTITION BY RANGE (col1) (
                               PARTITION p0 VALUES LESS THAN (100) (
                                     SUBPARTITION sp0_1 VALUES LESS THAN (50),
                                     SUBPARTITION sp0_2 VALUES LESS THAN (100)
                               ),
                               PARTITION p1 VALUES LESS THAN (200) (
                                     SUBPARTITION sp1_1 VALUES LESS THAN (150),
                                     SUBPARTITION sp1_2 VALUES LESS THAN (200)
                               )
                         );
        Query OK, 0 rows affected

        ```
      2. 查询表 `tbl2` 是否有数据，此时显示表为空。

        ```shell
        obclient [test]> SELECT * FROM tbl2;
        Empty set

        ```
      3. 使用旁路导入将 `tbl1.csv` 文件中的数据导入到表 `tbl2`。

             - 指定表 `tbl2` 的所有列导入数据。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl2 FIELDS TERMINATED BY ',';
              Query OK, 3 rows affected
              Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

              ```
             - 指定表 `tbl2` 的指定任意列导入数据。例如指定 `col1`，`col2` 列。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl2 FIELDS TERMINATED BY ','(col1,col2);
              Query OK, 3 rows affected
              Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

              ```
             - （可选）指定表 `tbl2` 的一级分区导入数据。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl2 partition(p0, p1)  FIELDS TERMINATED BY ',';

              ```
             - （可选）指定表 `tbl2` 的二级分区导入数据。

              ```shell
              obclient [test]> LOAD DATA /*+ direct(true,1024,'inc_replace') parallel(16) */ INFILE '/home/admin/tbl1.csv' INTO TABLE tbl2 partition(p0sp0_1, p1sp1_1)  FIELDS TERMINATED BY ',';

                       ```
      4. 验证表 `tbl2` 中是否已导入数据。

        ```shell
        obclient [test]>  SELECT * FROM tbl2;

        ```

        查询结果如下：

        ```

## 使用 INSERT INTO SELECT 语句旁路导入数据

`INSERT INTO SELECT` 语句通过使用 `direct()` 加上 `enable_parallel_dml` Hint 来走旁路导入，在未指定 Hint 时能基于配置项 [default_load_mode](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478927) 确定导入数据的行为。

### 使用限制

- 只支持 PDML（Parallel Data Manipulation Language，并行数据操纵语言），非 PDML 不能用旁路导入。有关并行 DML 的更多信息，参见 [并行 DML](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478604)。
 - 在导入过程中无法同时执行两个写操作语句（即不能同时写一个表），因为导入过程中会先加表锁，并且整个导入过程中只能进行读操作。
 - 不支持在触发器（Trigger）使用。
 - 不支持含有生成列的表（某些索引会产生隐藏生成列，例如 KEY `idx_c2` (`c2`(16)) GLOBAL）。
 - 不支持 Liboblog 和闪回查询（Flashback Query）。
 - 有索引（不包括主键）的表不支持增量旁路导入。
 - 有外键的表不支持增量旁路导入。

### 使用语法

```sql
INSERT /*+ [DIRECT(need_sort,max_error,{'inc'|'inc_replace'})] enable_parallel_dml parallel(N) */ INTO  table_name [PARTITION(PARTITION_OPTION)] select_sentence

```

更多 `INSERT INTO` 语法的信息，请参见 [INSERT（MySQL 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479534) 和 [INSERT（Oracle 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480988)。

**参数解释：**

| 参数 | 描述 |
| --- | --- |
| DIRECT() | 使用 Hint 启用旁路导入功能。`DIRECT()` 参数解释如下：   - `need_sort`：表示写入的数据是否需要排序，值为 `bool` 类型：      - `true`：表示需要排序。     - `false`：表示不需要排序。 - `max_error`：表示最大容忍的错误行数。值为 `INT` 类型，超过这个数值导入任务执行会失败。 - `inc\|inc_replace`：表示增量旁路导入的两种模式，取值须使用英文单引号包起来。      - `inc`：表示增量导入，检查主键是否重复，支持 `INSERT` 和 `IGNORE` 语义。     - `inc_replace`：表示增量导入，但不检查主键是否重复，相当于 `REPLACE` 语义的增量导入。 |
| enable_parallel_dml | 加载数据的并行度。   #### 说明    一般情况下，`enable_parallel_dml` Hint 和 `parallel` Hint 必须配合使用才能开启并行 DML。不过，当目标表的 Schema 上指定了表级别的并行度时，仅需指定 `enable_parallel_dml` Hint。 |
| parallel(N) | 加载数据的并行度，必填项，取值是大于 1 的整数。 |
| table_name | 导入数据的表的名称，支持指定表任意列数目。 |
| PARTITION_OPTION | 指定分区旁路导入时的分区名：   - partition_option_list：一级分区列表，同时插入多个分区时以逗号（,）分隔。 - subpartition_option_list：二级分区列表，同时插入多个分区时以逗号（,）分隔。 |

### 使用示例

`INSERT INTO SELECT` 语句中增量旁路导入的操作步骤与全量旁路导入的步骤一样，只需要将 `full` 字段的取值替换为 `inc` 或 `inc_replace` 即可。

**示例 1：使用 INSERT INTO SELECT 增量旁路导入的完整示例。**

使用旁路导入将表 `tbl2` 中的部分数据导入到 `tbl1` 中。

1. 查询表 `tbl1` 是否有数据，此时显示表为空。

   ```
 2. 查询表 `tbl2` 是否有数据。

   ```

   查询到表 `tbl2` 有数据。

   ```shell
    +------+------+------+
    | col1 | col2 | col3 |
    +------+------+------+
    |    1 | a1   |   11 |
    |    2 | a2   |   22 |
    |    3 | a3   |   33 |
    +------+------+------+
    3 rows in set

   ```
 3. 使用旁路导入将表 `tbl2` 中的数据导入到表 `tbl1`。

      - 指定 `INSERT INTO SELECT` 语句的 Hint。

            - 不指定分区导入。

             ```shell
             obclient [test]> INSERT /*+ DIRECT(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl1 SELECT t2.col1,t2.col3 FROM tbl2 t2;
             Query OK, 3 rows affected
             Records: 3  Duplicates: 0  Warnings: 0

             ```
            - （可选）指定分区导入。

             ```shell
             obclient [test]> INSERT /*+ DIRECT(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl1 partition(p0, p1) SELECT t2.col1,1 FROM tbl2 partition(p0, p1) t2;
             Query OK, 3 rows affected
             Records: 3  Duplicates: 0  Warnings: 0

             ```

             ```shell
             obclient [test]> INSERT /*+ DIRECT(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl1 partition(p0, p1) SELECT t2.col1,1 FROM tbl2 partition(p0sp0_1, p1sp1_1) t2;
             Query OK, 3 rows affected
             Records: 3  Duplicates: 0  Warnings: 0

             ```
      - 不指定 `INSERT INTO SELECT` 语句的 Hint。

       设置配置项 `default_load_mode` 的值为 `INC_DIRECT_WRITE` 或 `INC_REPLACE_DIRECT_WRITE`。

       ```

       ```shell
       obclient [test]> INSERT INTO tbl1 SELECT t2.col1,t2.col3 FROM tbl1 t2;

   ```

   查询结果如下：

   ```

   结果显示表 `tbl1` 中已导入数据。
 5. (可选)在 `EXPLAIN EXTENDED` 语句的返回结果的 `Note` 中，查看是否通过旁路导入写入的数据。

   ```shell
   obclient [test]> EXPLAIN EXTENDED INSERT /*+ direct(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl1 SELECT t2.col1,t2.col3 FROM tbl2 t2;

   ```

   返回结果如下：

   ```shell
   +--------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | Query Plan                                                                                                                                                   |
   +--------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ==============================================================================                                                                               |
   | |ID|OPERATOR                           |NAME           |EST.ROWS|EST.TIME(us)|                                                                               |
   | ------------------------------------------------------------------------------                                                                               |
   | |0 |PX COORDINATOR                     |               |3       |27          |                                                                               |
   | |1 |└─EXCHANGE OUT DISTR               |:EX10001       |3       |27          |                                                                               |
   | |2 |  └─INSERT                         |               |3       |26          |                                                                               |
   | |3 |    └─EXCHANGE IN DISTR            |               |3       |1           |                                                                               |
   | |4 |      └─EXCHANGE OUT DISTR (RANDOM)|:EX10000       |3       |1           |                                                                               |
   | |5 |        └─SUBPLAN SCAN             |ANONYMOUS_VIEW1|3       |1           |                                                                               |
   | |6 |          └─PX BLOCK ITERATOR      |               |3       |1           |                                                                               |
   | |7 |            └─TABLE FULL SCAN      |t2             |3       |1           |                                                                               |
   | ==============================================================================                                                                               |
   | Outputs & filters:                                                                                                                                           |
   | -------------------------------------                                                                                                                        |
   |   0 - output(nil), filter(nil), rowset=16                                                                                                                    |
   |   1 - output(nil), filter(nil), rowset=16                                                                                                                    |
   |       dop=16                                                                                                                                                 |
   |   2 - output(nil), filter(nil)                                                                                                                               |
   |       columns([{tbl1: ({tbl1: (tbl1.__pk_increment(0x7efa518277d0), tbl1.col1(0x7efa518119c0), tbl1.col3(0x7efa51811e00))})}]), partitions(p0),              |
   |       column_values([T_HIDDEN_PK(0x7efa51827c10)], [column_conv(INT,PS:(11,0),NULL,ANONYMOUS_VIEW1.col1(0x7efa51826f50))(0x7efa51828030)], [column_conv(INT, |
   |       PS:(11,0),NULL,ANONYMOUS_VIEW1.col3(0x7efa51827390))(0x7efa5182ff60)])                                                                                 |
   |   3 - output([T_HIDDEN_PK(0x7efa51827c10)], [ANONYMOUS_VIEW1.col1(0x7efa51826f50)], [ANONYMOUS_VIEW1.col3(0x7efa51827390)]), filter(nil), rowset=16          |
   |   4 - output([T_HIDDEN_PK(0x7efa51827c10)], [ANONYMOUS_VIEW1.col1(0x7efa51826f50)], [ANONYMOUS_VIEW1.col3(0x7efa51827390)]), filter(nil), rowset=16          |
   |       dop=16                                                                                                                                                 |
   |   5 - output([ANONYMOUS_VIEW1.col1(0x7efa51826f50)], [ANONYMOUS_VIEW1.col3(0x7efa51827390)]), filter(nil), rowset=16                                         |
   |       access([ANONYMOUS_VIEW1.col1(0x7efa51826f50)], [ANONYMOUS_VIEW1.col3(0x7efa51827390)])                                                                 |
   |   6 - output([t2.col1(0x7efa51825f10)], [t2.col3(0x7efa518267c0)]), filter(nil), rowset=16                                                                   |
   |   7 - output([t2.col1(0x7efa51825f10)], [t2.col3(0x7efa518267c0)]), filter(nil), rowset=16                                                                   |
   |       access([t2.col1(0x7efa51825f10)], [t2.col3(0x7efa518267c0)]), partitions(p0)                                                                           |
   |       is_index_back=false, is_global_index=false,                                                                                                            |
   |       range_key([t2.__pk_increment(0x7efa51856410)]), range(MIN ; MAX)always true                                                                            |
   | Used Hint:                                                                                                                                                   |
   | -------------------------------------                                                                                                                        |
   |   /*+                                                                                                                                                        |
   |                                                                                                                                                              |
   |       USE_PLAN_CACHE( NONE )                                                                                                                                 |
   |       PARALLEL(16)                                                                                                                                           |
   |       ENABLE_PARALLEL_DML                                                                                                                                    |
   |       DIRECT(TRUE, 0, 'INC_REPLACE')                                                                                                                         |
   |   */                                                                                                                                                         |
   | Qb name trace:                                                                                                                                               |
   | -------------------------------------                                                                                                                        |
   |   stmt_id:0, stmt_type:T_EXPLAIN                                                                                                                             |
   |   stmt_id:1, INS$1                                                                                                                                           |
   |   stmt_id:2, SEL$1                                                                                                                                           |
   | Outline Data:                                                                                                                                                |
   | -------------------------------------                                                                                                                        |
   |   /*+                                                                                                                                                        |
   |       BEGIN_OUTLINE_DATA                                                                                                                                     |
   |       PARALLEL(@"SEL$1" "t2"@"SEL$1" 16)                                                                                                                     |
   |       FULL(@"SEL$1" "t2"@"SEL$1")                                                                                                                            |
   |       USE_PLAN_CACHE( NONE )                                                                                                                                 |
   |       PARALLEL(16)                                                                                                                                           |
   |       ENABLE_PARALLEL_DML                                                                                                                                    |
   |       OPTIMIZER_FEATURES_ENABLE('4.3.3.0')                                                                                                                   |
   |       DIRECT(TRUE, 0, 'INC_REPLACE')                                                                                                                         |
   |       END_OUTLINE_DATA                                                                                                                                       |
   |   */                                                                                                                                                         |
   | Optimization Info:                                                                                                                                           |
   | -------------------------------------                                                                                                                        |
   |   t2:                                                                                                                                                        |
   |       table_rows:3                                                                                                                                           |
   |       physical_range_rows:3                                                                                                                                  |
   |       logical_range_rows:3                                                                                                                                   |
   |       index_back_rows:0                                                                                                                                      |
   |       output_rows:3                                                                                                                                          |
   |       table_dop:16                                                                                                                                           |
   |       dop_method:Global DOP                                                                                                                                  |
   |       avaiable_index_name:[tbl2]                                                                                                                             |
   |       stats info:[version=0, is_locked=0, is_expired=0]                                                                                                      |
   |       dynamic sampling level:0                                                                                                                               |
   |       estimation method:[DEFAULT, STORAGE]                                                                                                                   |
   |   Plan Type:                                                                                                                                                 |
   |       DISTRIBUTED                                                                                                                                            |
   |   Note:                                                                                                                                                      |
   |       Degree of Parallelism is 16 because of hint                                                                                                            |
   |       Direct-mode is enabled in insert into select                                                                                                           |
   +--------------------------------------------------------------------------------------------------------------------------------------------------------------+
   77 rows in set (0.009 sec)

   ```

**示例 2：对于 Range-Hash 二级分区表，指定一级分区旁路导入数据。**

目标表为二级分区，一级为 Range 分区，二级为 Hash 分区，指定一级分区增量旁路导入。

1. 创建包含两个分区的表 `tbl1`，一级为 Range 分区，二级为 Hash 分区。

   ```shell
   obclient [test]> CREATE TABLE tbl1(col1 INT,col2 INT)
                     PARTITION BY RANGE COLUMNS(col1)
                        SUBPARTITION BY HASH(col2) SUBPARTITIONS 3 (
                           PARTITION p0 VALUES LESS THAN(10),
                           PARTITION p1 VALUES LESS THAN(20));

   ```
 2. 使用旁路导入将表 `tbl2` 中的数据导入到表 `tbl1` 的 `p0`、`p1` 分区中。

   ```shell
   obclient [test]> insert /*+ direct(true, 0, 'inc_replace') enable_parallel_dml parallel(3) append */ into tbl1 partition(p0,p1) select * from tbl2 where col1 <20;

   ```

使用旁路导入将表 `tbl4` 中的部分数据导入到 `tbl3` 中。

1. 查询表 `tbl3` 是否有数据，此时显示表为空。

   ```shell
   obclient [test]> SELECT * FROM tbl3;
   Empty set

   ```
 2. 查询表 `tbl4` 是否有数据。

   ```shell
   obclient [test]> SELECT * FROM tbl4;

   ```

   查询到表 `tbl4` 有数据。

   ```shell
   +------+------+------+
   | COL1 | COL2 | COL3 |
   +------+------+------+
   |    1 | a1   |   11 |
   |    2 | a2   |   22 |
   |    3 | a3   |   33 |
   +------+------+------+
   3 rows in set (0.000 sec)

   ```
 3. 使用旁路导入将表 `tbl4` 中的数据导入到表 `tbl3`。

             ```shell
             obclient [test]> INSERT /*+ direct(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl3 SELECT t2.col1, t2.col3 FROM tbl4 t2 WHERE ROWNUM <= 10000;
             Query OK, 3 rows affected
             Records: 3  Duplicates: 0  Warnings: 0

             ```shell
             obclient [test]> INSERT /*+ DIRECT(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl3 partition(p0, p1) SELECT t2.col1,1 FROM tbl4 partition(p0, p1) t2;
             Query OK, 3 rows affected
             Records: 3  Duplicates: 0  Warnings: 0

             ```

             ```shell
             obclient [test]> INSERT /*+ DIRECT(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl3 partition(p0, p1) SELECT t2.col1,1 FROM tbl4 partition(p0sp0_1, p1sp1_1) t2;
             Query OK, 3 rows affected
             Records: 3  Duplicates: 0  Warnings: 0

       ```

       ```shell
       obclient [test]> INSERT INTO tbl3 SELECT t2.col1, t2.col3 FROM tbl4 t2 WHERE ROWNUM <= 10000;

       ```
 4. 验证表 `tbl3` 中是否已导入数据。

   ```shell
   obclient [test]> SELECT * FROM tbl3;

   ```

   查询结果如下：

   ```shell
   +------+------+
   | col1 | col3 |
   +------+------+
   |    1 |   11 |
   |    2 |   22 |
   |    3 |   33 |
   +------+------+
   3 rows in set

   ```

   结果显示表 `tbl3` 中已导入数据。
 5. (可选)在 `EXPLAIN EXTENDED` 语句的返回结果的 `Note` 中，查看是否通过旁路导入写入的数据。

   ```shell
   obclient [test]> EXPLAIN EXTENDED INSERT /*+ direct(true, 0, 'inc_replace') enable_parallel_dml parallel(16) */ INTO tbl3 SELECT t2.col1,t2.col3 FROM tbl4 t2 WHERE ROWNUM <= 10000;

   返回结果如下：

   ```shell
   +--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | Query Plan                                                                                                                                                         |
   +--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | =========================================================================================                                                                          |
   | |ID|OPERATOR                                      |NAME           |EST.ROWS|EST.TIME(us)|                                                                          |
   | -----------------------------------------------------------------------------------------                                                                          |
   | |0 |PX COORDINATOR                                |               |3       |34          |                                                                          |
   | |1 |└─EXCHANGE OUT DISTR                          |:EX10002       |3       |33          |                                                                          |
   | |2 |  └─INSERT                                    |               |3       |32          |                                                                          |
   | |3 |    └─EXCHANGE IN DISTR                       |               |3       |7           |                                                                          |
   | |4 |      └─EXCHANGE OUT DISTR (RANDOM)           |:EX10001       |3       |7           |                                                                          |
   | |5 |        └─MATERIAL                            |               |3       |3           |                                                                          |
   | |6 |          └─SUBPLAN SCAN                      |ANONYMOUS_VIEW1|3       |3           |                                                                          |
   | |7 |            └─LIMIT                           |               |3       |3           |                                                                          |
   | |8 |              └─EXCHANGE IN DISTR             |               |3       |3           |                                                                          |
   | |9 |                └─EXCHANGE OUT DISTR          |:EX10000       |3       |1           |                                                                          |
   | |10|                  └─LIMIT                     |               |3       |1           |                                                                          |
   | |11|                    └─PX BLOCK ITERATOR       |               |3       |1           |                                                                          |
   | |12|                      └─COLUMN TABLE FULL SCAN|T2             |3       |1           |                                                                          |
   | =========================================================================================                                                                          |
   | Outputs & filters:                                                                                                                                                 |
   | -------------------------------------                                                                                                                              |
   |   0 - output(nil), filter(nil), rowset=16                                                                                                                          |
   |   1 - output(nil), filter(nil), rowset=16                                                                                                                          |
   |       dop=16                                                                                                                                                       |
   |   2 - output(nil), filter(nil)                                                                                                                                     |
   |       columns([{TBL3: ({TBL3: (TBL3.__pk_increment(0x7efaad22b0e0), TBL3.COL1(0x7efaad2123f0), TBL3.COL3(0x7efaad212830))})}]), partitions(p0),                    |
   |       column_values([T_HIDDEN_PK(0x7efaad22b520)], [column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.COL1(0x7efaad22a860))(0x7efaad22b930)], [column_conv(NUMBER, |
   |       PS:(-1,0),NULL,ANONYMOUS_VIEW1.COL3(0x7efaad22aca0))(0x7efaad233850)])                                                                                       |
   |   3 - output([T_HIDDEN_PK(0x7efaad22b520)], [ANONYMOUS_VIEW1.COL1(0x7efaad22a860)], [ANONYMOUS_VIEW1.COL3(0x7efaad22aca0)]), filter(nil), rowset=16                |
   |   4 - output([T_HIDDEN_PK(0x7efaad22b520)], [ANONYMOUS_VIEW1.COL1(0x7efaad22a860)], [ANONYMOUS_VIEW1.COL3(0x7efaad22aca0)]), filter(nil), rowset=16                |
   |       is_single, dop=1                                                                                                                                             |
   |   5 - output([ANONYMOUS_VIEW1.COL1(0x7efaad22a860)], [ANONYMOUS_VIEW1.COL3(0x7efaad22aca0)]), filter(nil), rowset=16                                               |
   |   6 - output([ANONYMOUS_VIEW1.COL1(0x7efaad22a860)], [ANONYMOUS_VIEW1.COL3(0x7efaad22aca0)]), filter(nil), rowset=16                                               |
   |       access([ANONYMOUS_VIEW1.COL1(0x7efaad22a860)], [ANONYMOUS_VIEW1.COL3(0x7efaad22aca0)])                                                                       |
   |   7 - output([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), filter(nil), rowset=16                                                                         |
   |       limit(cast(FLOOR(cast(10000, NUMBER(-1, -85))(0x7efaad227ef0))(0x7efaad25ac30), BIGINT(-1, 0))(0x7efaad25b6d0)), offset(nil)                                 |
   |   8 - output([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), filter(nil), rowset=16                                                                         |
   |   9 - output([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), filter(nil), rowset=16                                                                         |
   |       dop=16                                                                                                                                                       |
   |  10 - output([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), filter(nil), rowset=16                                                                         |
   |       limit(cast(FLOOR(cast(10000, NUMBER(-1, -85))(0x7efaad227ef0))(0x7efaad25ac30), BIGINT(-1, 0))(0x7efaad25b6d0)), offset(nil)                                 |
   |  11 - output([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), filter(nil), rowset=16                                                                         |
   |  12 - output([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), filter(nil), rowset=16                                                                         |
   |       access([T2.COL1(0x7efaad229470)], [T2.COL3(0x7efaad229f40)]), partitions(p0)                                                                                 |
   |       limit(cast(FLOOR(cast(10000, NUMBER(-1, -85))(0x7efaad227ef0))(0x7efaad25ac30), BIGINT(-1, 0))(0x7efaad25b6d0)), offset(nil), is_index_back=false,           |
   |        is_global_index=false,                                                                                                                                      |
   |       range_key([T2.__pk_increment(0x7efaad25a720)]), range(MIN ; MAX)always true                                                                                  |
   | Used Hint:                                                                                                                                                         |
   | -------------------------------------                                                                                                                              |
   |   /*+                                                                                                                                                              |
   |                                                                                                                                                                    |
   |       USE_PLAN_CACHE( NONE )                                                                                                                                       |
   |       PARALLEL(16)                                                                                                                                                 |
   |       ENABLE_PARALLEL_DML                                                                                                                                          |
   |       DIRECT(TRUE, 0, 'INC_REPLACE')                                                                                                                               |
   |   */                                                                                                                                                               |
   | Qb name trace:                                                                                                                                                     |
   | -------------------------------------                                                                                                                              |
   |   stmt_id:0, stmt_type:T_EXPLAIN                                                                                                                                   |
   |   stmt_id:1, INS$1                                                                                                                                                 |
   |   stmt_id:2, SEL$1                                                                                                                                                 |
   |   stmt_id:3, parent:SEL$1  > SEL$658037CB > SEL$DCAFFB86                                                                                                           |
   | Outline Data:                                                                                                                                                      |
   | -------------------------------------                                                                                                                              |
   |   /*+                                                                                                                                                              |
   |       BEGIN_OUTLINE_DATA                                                                                                                                           |
   |       PARALLEL(@"SEL$DCAFFB86" "T2"@"SEL$1" 16)                                                                                                                    |
   |       FULL(@"SEL$DCAFFB86" "T2"@"SEL$1")                                                                                                                           |
   |       USE_COLUMN_TABLE(@"SEL$DCAFFB86" "T2"@"SEL$1")                                                                                                               |
   |       MERGE(@"SEL$658037CB" < "SEL$1")                                                                                                                             |
   |       USE_PLAN_CACHE( NONE )                                                                                                                                       |
   |       PARALLEL(16)                                                                                                                                                 |
   |       ENABLE_PARALLEL_DML                                                                                                                                          |
   |       OPTIMIZER_FEATURES_ENABLE('4.3.3.0')                                                                                                                         |
   |       DIRECT(TRUE, 0, 'INC_REPLACE')                                                                                                                               |
   |       END_OUTLINE_DATA                                                                                                                                             |
   |   */                                                                                                                                                               |
   | Optimization Info:                                                                                                                                                 |
   | -------------------------------------                                                                                                                              |
   |   T2:                                                                                                                                                              |
   |       table_rows:3                                                                                                                                                 |
   |       physical_range_rows:3                                                                                                                                        |
   |       logical_range_rows:3                                                                                                                                         |
   |       index_back_rows:0                                                                                                                                            |
   |       output_rows:3                                                                                                                                                |
   |       table_dop:16                                                                                                                                                 |
   |       dop_method:Global DOP                                                                                                                                        |
   |       avaiable_index_name:[TBL4]                                                                                                                                   |
   |       stats info:[version=0, is_locked=0, is_expired=0]                                                                                                            |
   |       dynamic sampling level:0                                                                                                                                     |
   |       estimation method:[DEFAULT, STORAGE]                                                                                                                         |
   |   Plan Type:                                                                                                                                                       |
   |       DISTRIBUTED                                                                                                                                                  |
   |   Note:                                                                                                                                                            |
   |       Degree of Parallelism is 16 because of hint                                                                                                                  |
   |       Direct-mode is enabled in insert into select                                                                                                                 |
   |   Expr Constraints:                                                                                                                                                |
   |       cast(FLOOR(cast(10000, NUMBER(-1, -85))), BIGINT(-1, 0)) >= 1 result is TRUE                                                                                 |
   +--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   96 rows in set (0.007 sec)

   ```

   ```shell
   obclient [test]> CREATE TABLE tbl1_1 (
                        col1 INT,
                        col2 INT
                     )
                     PARTITION BY RANGE (col1)
                     SUBPARTITION BY HASH (col2)
                     SUBPARTITION TEMPLATE (
                        SUBPARTITION sp1,
                        SUBPARTITION sp2,
                        SUBPARTITION sp3
                     )
                     (
                        PARTITION p0 VALUES LESS THAN (10),
                        PARTITION p1 VALUES LESS THAN (20)  
                     );

   ```

## 使用 CREATE TABLE AS SELECT 语句旁路导入数据

`CREATE TABLE AS SELECT` 语句通过设置 `DIRECT()` 和 `PARALLE()` Hint 来指定旁路导入的导数方式，在未指定 Hint 时能基于配置项 [default_load_mode](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478927) 确定导入数据的行为。

### 使用语法

```sql
CREATE /*+ [DIRECT(need_sort,max_error,{'inc'|'inc_replace'})] parallel(N) */ TABLE table_name [AS] select_sentence

```

更多 `CREATE TABLE AS SELECT` 语法的信息，请参见 [CREATE TABLE（MySQL 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479546) 和 [CREATE TABLE（Oracle 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480962)。

**参数解释：**

| 参数 | 描述 |
| --- | --- |
| DIRECT() | 使用 Hint 启用旁路导入功能。`DIRECT()` 参数解释如下：   - `need_sort`：表示写入的数据是否需要排序，值为 `bool` 类型：      - `true`：表示需要排序。     - `false`：表示不需要排序。 - `max_error`：表示最大容忍的错误行数。值为 `INT` 类型，超过这个数值导入任务执行会失败。 - `inc\|inc_replace`：表示增量旁路导入的两种模式，取值须使用英文单引号包起来。      - `inc`：表示增量导入，检查主键是否重复，支持 `INSERT` 和 `IGNORE` 语义。     - `inc_replace`：表示增量导入，但不检查主键是否重复，相当于 `REPLACE` 语义的增量导入。    #### 注意    当 `load_mode` 取值为 `inc_replace` 时，`LOAD DATA` 语句中不允许有 `REPLACE` 或 `IGNORE` 关键字。 |
| parallel(N) | 加载数据的并行度，必填项，取值是大于 1 的整数。 |

### 使用示例

    MySQL 模式   Oracle 模式

使用旁路导入将表 `tbl1` 中的数据导入到其他表中。

   ```shell
   obclient [test]> CREATE TABLE tbl1(c1 int);

   ```
 2. 插入数据到表 `tbl1`。

   ```shell
   obclient [test]> INSERT INTO tbl1 VALUES (1),(2),(3);

   ```
 3. 查询表 `tbl1` 中的数据。

   ```

   查询结果如下：

   ```shell
   +------+
   | c1   |
   +------+
   |    1 |
   |    2 |
   |    3 |
   +------+
   3 rows in set (0.027 sec)

   ```
 4. 使用旁路导入将表 `tbl1` 中数据导入到表 `tbl2`。

      - 指定 `CREATE TABLE AS SELECT` 语句的 Hint。

            - 使用 `inc` Hint 旁路导入数据。

             ```shell
             obclient [test]> CREATE /*+ direct(true, 0, 'inc') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;

             ```
            - 使用 `inc_replace` Hint 旁路导入数据。

             ```shell
             obclient [test]> CREATE /*+ direct(true, 0, 'inc_replace') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;

             ```
      - 不指定 `CREATE TABLE AS SELECT` 语句的 Hint。

       ```

       ```shell
       obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;

       ```
 5. 验证表 `tbl2` 中是否已导入数据。

   ```

   查询结果如下：

   ```shell
   +------+
   | c1   |
   +------+
   |    1 |
   |    3 |
   |    2 |
   +------+
   3 rows in set (0.050 sec)

   ```

   ```shell
   obclient [SYS]> CREATE TABLE tbl1(c1 int);

   ```shell
   obclient [SYS]> INSERT INTO tbl1 VALUES (1),(2),(3);

   ```shell
   obclient [SYS]> SELECT * FROM tbl1;

   ```

   查询结果如下：

   ```shell
   +------+
   | C1   |
   +------+
   |    1 |
   |    2 |
   |    3 |
   +------+
   3 rows in set (0.045 sec)

             ```shell
             obclient [SYS]> CREATE /*+ direct(true, 0, 'inc') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;

             ```shell
             obclient [SYS]> CREATE /*+ direct(true, 0, 'inc_replace') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;

       ```shell
       obclient [SYS]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE';

       ```

       ```shell
       obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;

   ```shell
   obclient [SYS]> SELECT * FROM tbl2;

   ```

   查询结果如下：

   ```shell
   +------+
   | C1   |
   +------+
   |    3 |
   |    2 |
   |    1 |
   +------+
   3 rows in set (0.013 sec)

   ```

## 相关文档

- [表与表之间的数据迁移](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475857)
 - [SQL 执行计划简介](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478583)
 - [连接方式概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476086)
 - [删除表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476669)

 上一篇 下一篇 ![有帮助](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) 咨询热线
