基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
使用 CREATE TABLE AS SELECT 语句旁路导入数据
更新时间:2026-08-13 19:27:47
本文将介绍如何通过 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。
参数解释:
| 参数 | 描述 |
|---|---|
| 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;