描述
CREATE TABLE AS SELECT(简称 CTAS)基于查询结果创建一个新表并填充数据。新表将包含查询结果中的所有列和数据。说明:
由于 TCI 提供的 SDK 暂时不支持 CTAS 的原子性保证操作,因此 CTAS 为非原子性操作(non-atomic)。如果 CTAS 执行过程中失败,可能会残留部分写入的数据。
语法
CREATE [ OR REPLACE ] TABLE table_identifier[ ( col_name1 col_type1 [ NOT NULL ], ... ) ]USING tci[ PARTITIONED BY ( partition_expr [ , ... ] ) ][ TBLPROPERTIES ( 'key' = 'value', ... ) ]AS select_statement
参数说明
子句/关键字 | 用途 | 说明 |
OR REPLACE / REPLACE TABLE | 表存在时替换内容(RTAS) | 替换保留历史快照记录,同时更新 Schema 和分区规范 |
select_statement | 生成新表数据的 SELECT 查询 | 查询结果决定新表 Schema(除非显式指定列定义) |
注意事项
非原子性:TCI 当前不支持原子性保证,执行失败时可能有残留数据。
CTAS 创建的新表不会自动继承源表的分区规范和表属性,需显式指定
PARTITIONED BY 和 TBLPROPERTIES。使用 RTAS 时,Schema 和分区规范会被替换;如不想改变 Schema,应改用
INSERT OVERWRITE。RTAS 中指定的表属性会与现有表属性合并,相同 key 会更新为新值。
不支持
EXTERNAL 和 LOCATION 子句。示例
准备源表及数据
CREATE TABLE tci_ctas_source (id INT,name STRING,score DOUBLE) USING tci;INSERT INTO tci_ctas_sourceVALUES (1, 'Alice', 95.5), (2, 'Bob', 88.0), (3, 'Charlie', 92.3);
CTAS 基本用法
CREATE TABLE tci_ctas_basicUSING tciAS SELECT * FROM tci_ctas_source;
CTAS 复杂用法:分区规则与排序键配置
CREATE TABLE tci_ctas_part_propUSING tciPARTITIONED BY (bucket(4, id))TBLPROPERTIES ('sort-order' = 'name')AS SELECT id, name, score FROM tci_ctas_source;
验证 CTAS 数据正确性
SELECT count(*) FROM tci_ctas_basic;SELECT * FROM tci_ctas_basic ORDER BY id;DESCRIBE tci_ctas_part_prop;
RTAS 使用示例
-- 先创建目标表CREATE TABLE tci_rtas_target (id INT,name STRING) USING tci;INSERT INTO tci_rtas_target VALUES (10, 'OldData');-- RTAS 替换REPLACE TABLE tci_rtas_targetUSING tciAS SELECT id, name FROM tci_ctas_source;-- 验证 RTAS 结果SELECT * FROM tci_rtas_target ORDER BY id;