首批通过分布式安全可靠测评,为关键业务系统打造
使用 CREATE TABLE AS SELECT 语句旁路导入数据
更新时间:2026-06-18 10:13:19
本文将介绍如何通过 CREATE TABLE AS SELECT(CTAS) 在 建表的同时 将查询结果写入新表,以及如何配合 旁路导入 Hint 与 default_load_mode。
数据源可以是 内表、外表、含 FILES(...) 的 SELECT 等。
旁路导入模式(全量 / 增量)
CREATE TABLE AS SELECT 语句通过设置 DIRECT() Hint 指定旁路导入模式;未指定 Hint 时可通过配置项 default_load_mode 控制默认行为。
使用语法
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 模式) 和 CREATE TABLE(Oracle 模式)。
参数解释:
| 参数 | 描述 |
|---|---|
| APPEND | DIRECT() | 使用 Hint 启用旁路导入功能。
注意当 |
| parallel(N) | 加载数据的并行度,必填项,取值是大于 1 的整数。 |
使用示例
使用旁路导入将表 tbl1 中的数据导入到其他表中。
创建表
tbl1并写入测试数据。obclient [test]> CREATE TABLE tbl1(c1 int); obclient [test]> INSERT INTO tbl1 VALUES (1),(2),(3); obclient [test]> SELECT * FROM tbl1;使用
CREATE TABLE AS SELECT导入到tbl2。全量模式:
obclient [test]> CREATE /*+ direct(true, 0, 'full') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;增量模式:
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)):obclient [test]> CREATE /*+ append parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;
不指定 Hint 时,可通过配置项控制默认模式:
obclient [test]> ALTER SYSTEM SET default_load_mode ='FULL_DIRECT_WRITE'; obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;或:
obclient [test]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE'; obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;
使用旁路导入将表 tbl1 中的数据导入到其他表中。
创建表
tbl1并写入测试数据。obclient [SYS]> CREATE TABLE tbl1(c1 int); obclient [SYS]> INSERT INTO tbl1 VALUES (1),(2),(3); obclient [SYS]> SELECT * FROM tbl1;使用
CREATE TABLE AS SELECT导入到tbl2。全量模式:
obclient [SYS]> CREATE /*+ direct(true, 0, 'full') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;增量模式:
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;可选:使用
APPEND(等价于DIRECT(true, 0)):obclient [SYS]> CREATE /*+ append parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;
不指定 Hint 时,可通过配置项控制默认模式:
obclient [SYS]> ALTER SYSTEM SET default_load_mode ='FULL_DIRECT_WRITE'; obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;或:
obclient [SYS]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE'; obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;