You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Redshift中CTE多次引用子查询触发断言错误的技术问询

AWS Redshift重复引用CTE标量子查询触发Assert错误

问题场景

当在WHERE子句中多次引用同一个CTE的标量子查询时,Redshift会触发内部Assert错误,示例查询如下:

WITH var_table AS (
SELECT
    8 AS x
)
SELECT * FROM real_table
WHERE real_table_col_1 = (select x from var_table)
AND real_table_col_2 = (select x from var_table)

错误详情

触发的错误信息:

ERROR: Assert
  Detail: 
  -----------------------------------------------
  error:  Assert
  code:      1000
  context:   query->a_last_plan()->m_locus == LocusXNode - 
  query:     48508061
  location:  xen_execute.cpp:8916
  process:   padbmaster [pid=2659]
  -----------------------------------------------

可正常执行的替代方案

  1. 改用临时表:将CTE替换为临时表后,查询可正常运行
create temporary table var_table AS (
SELECT
    8 AS x
);

SELECT * FROM real_table
WHERE real_table_col_1 = (select x from var_table)
AND real_table_col_2 = (select x from var_table)
  1. 单次引用CTE子查询:仅在WHERE子句中引用一次CTE的标量子查询时,无错误
WITH var_table AS (
SELECT
    8 AS x
)
SELECT * FROM real_table
WHERE real_table_col_1 = (select x from var_table)

结论

这是Redshift的Bug,并非设计特性。错误信息显示执行计划生成阶段的内部断言校验失败,属于Redshift查询引擎的逻辑缺陷。临时表是当前可靠的规避方案,若能整理出稳定的最小复现用例,建议提交给AWS技术支持团队以推动问题修复。

内容的提问来源于stack exchange,提问作者Amuoeba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:45:46