DuckDB使用Materialized CTE时出现语法错误求助
解决DuckDB中物化CTE(Materialized CTE)的语法错误
你的语法错误源于DuckDB对物化CTE的关键字位置要求——MATERIALIZED必须放在CTE名称之前,而非AS之后。
修正后的SQL查询如下:
WITH MATERIALIZED avg_cte AS ( SELECT carrier, MEAN(dep_delay) AS avg_dep_delay FROM flights GROUP BY carrier ) SELECT * FROM avg_cte
对应的修正后R可复现代例:
cc <- DBI::dbConnect(duckdb::duckdb()) DBI::dbWriteTable(cc, "flights", nycflights13::flights) q <- "WITH MATERIALIZED avg_cte AS ( SELECT carrier, MEAN(dep_delay) AS avg_dep_delay FROM flights GROUP BY carrier ) SELECT * FROM avg_cte " DBI::dbGetQuery(cc, q)
额外说明:
- DuckDB中CTE默认是
LAZY(按需计算),仅在被引用时执行 - 使用
MATERIALIZED会提前计算CTE结果并存储,适合后续查询多次引用该CTE的场景,能提升性能
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

