一、描述
注意:说明:
注意:由于 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;