---
title: "使用 CREATE TABLE AS SELECT 语句旁路导入数据 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 使用 CREATE TABLE AS SELECT 语句旁路导入数据 本文将介绍如何通过 CREATE TABLE AS SELECT （CTAS） 在 建表的同时 将查询结果写入新表，以及如何配合 旁路导入 Hint 与 default_load_mode 。 数据源可以是 内表、外表、含 FILES(...) 的…
---
切换语言

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

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

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

更新时间：2026-06-18 10:13:19

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/620.obap/300.obap-data-transfer/300.data-import/400.create-select-import.md)  

本文将介绍如何通过 **`CREATE TABLE AS SELECT`（CTAS）** 在 **建表的同时** 将查询结果写入新表，以及如何配合 **旁路导入** Hint 与 [default_load_mode](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685448)。

数据源可以是 **内表、外表、含 `FILES(...)` 的 SELECT** 等。

## 旁路导入模式（全量 / 增量）

`CREATE TABLE AS SELECT` 语句通过设置 `DIRECT()` Hint 指定旁路导入模式；未指定 Hint 时可通过配置项 [default_load_mode](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685448) 控制默认行为。

### 使用语法

```sql
CREATE /*+ [APPEND | DIRECT(need_sort,max_error,{'full'|'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-1000000005686098) 和 [CREATE TABLE（Oracle 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687576)。

**参数解释：**

| 参数 | 描述 |
| --- | --- |
| APPEND \| DIRECT() | 使用 Hint 启用旁路导入功能。   - `APPEND` Hint 默认等同于使用的 `DIRECT(true, 0)`，同时可以实现在线收集统计信息（`GATHER_OPTIMIZER_STATISTICS` Hint）的功能。 - `DIRECT()` 参数解释如下：      - `need_sort`：表示写入的数据是否需要排序，值为 `bool` 类型：            - `true`：表示需要排序。           - `false`：表示不需要排序。     - `max_error`：表示最大容忍的错误行数。值为 `INT` 类型，超过这个数值导入任务执行会失败。     - `full`：表示全量旁路导入。     - `inc\|inc_replace`：表示增量旁路导入的两种模式。            - `inc`：表示增量导入，检查主键是否重复，支持 `INSERT` 和 `IGNORE` 语义。           - `inc_replace`：表示增量导入，但不检查主键是否重复，相当于 `REPLACE` 语义的增量导入。    #### 注意    当 `load_mode` 取值为 `inc_replace` 时，`CREATE TABLE AS SELECT` 语句中不允许有 `REPLACE` 或 `IGNORE` 关键字。 |
| parallel(N) | 加载数据的并行度，必填项，取值是大于 1 的整数。 |

### 使用示例

    MySQL 模式   Oracle 模式

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

1. 创建表 `tbl1` 并写入测试数据。

   ```shell
   obclient [test]> CREATE TABLE tbl1(c1 int);
   obclient [test]> INSERT INTO tbl1 VALUES (1),(2),(3);
   obclient [test]> SELECT * FROM tbl1;

   ```
 2. 使用 `CREATE TABLE AS SELECT` 导入到 `tbl2`。

      - 全量模式：

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

       ```
      - 增量模式：

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

       ```
      - 可选：使用 `APPEND`（等价于 `DIRECT(true, 0)`）：

       ```shell
       obclient [test]> CREATE /*+ append parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;

       ```
 3. 不指定 Hint 时，可通过配置项控制默认模式：

   ```shell
   obclient [test]> ALTER SYSTEM SET default_load_mode ='FULL_DIRECT_WRITE';
   obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;

   ```

   或：

   ```shell
   obclient [test]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE';
   obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;

   ```

   ```shell
   obclient [SYS]> CREATE TABLE tbl1(c1 int);
   obclient [SYS]> INSERT INTO tbl1 VALUES (1),(2),(3);
   obclient [SYS]> SELECT * FROM tbl1;

      - 全量模式：

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

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

       ```shell
       obclient [SYS]> CREATE /*+ append parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;

   ```shell
   obclient [SYS]> ALTER SYSTEM SET default_load_mode ='FULL_DIRECT_WRITE';
   obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;

   ```

   或：

   ```shell
   obclient [SYS]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE';
   obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;

   ```

## 相关文档

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