Snowflake中用CTE创建临时表报错及语法疑问求助
Snowflake临时表创建语法错误及ON COMMIT参数说明
语法错误解决
你遇到的Unexpected 'CREATE'错误,是因为把CREATE TEMPORARY TABLE语句放在了CTE的定义上下文里,Snowflake不支持这种写法。以下是两种正确的写法:
写法1:先定义CTE,再创建临时表
WITH CTE AS ( -- 替换成你的CTE实际查询逻辑 SELECT column1, column2 FROM your_source_table ) CREATE TEMPORARY TABLE NET_AVAIL AS SELECT * FROM CTE;
写法2:将CTE嵌入到CREATE TABLE的查询中
CREATE TEMPORARY TABLE NET_AVAIL AS WITH CTE AS ( SELECT column1, column2 FROM your_source_table ) SELECT * FROM CTE;
ON COMMIT PRESERVE ROWS是否需要添加?
不需要额外添加,因为Snowflake临时表的默认行为就是ON COMMIT PRESERVE ROWS:
- 临时表是会话级的,只要当前会话未断开,无论执行
COMMIT还是ROLLBACK,表结构和数据都会保留,直到会话结束或你显式执行DROP TABLE NET_AVAIL。 - 只有当你需要临时表在事务提交后自动清空数据(但表结构仍在会话中保留)时,才需要指定
ON COMMIT DELETE ROWS。
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

