Redshift使用generate_series创建临时表报500310错误排查
报错根因
你遇到的500310报错是Redshift的函数执行范围限制导致的:generate_series()是仅Leader节点支持执行的函数,无法下推到计算节点运行。当你把该函数的输出直接作为CTE数据源用于创建临时表时,执行计划会要求该函数在计算节点运行,超出函数支持范围就会触发报错,语句本身不存在语法错误。
解决方案
直接替换generate_series()的实现逻辑,用计算节点原生支持的系统表生成连续序列即可,以下代码可直接执行:
drop table if exists date_list; create temporary table date_list as with seq as( select date '2020-02-27' + row_number() over(order by 1) as dt from pg_catalog.pg_class c1 cross join pg_catalog.pg_class c2 limit (date '2020-12-01' - date '2020-02-27') ) select * from seq;
- 实现逻辑:通过系统表
pg_catalog.pg_class交叉连接快速生成足够多的行,用窗口函数row_number()生成从1开始的连续整数,通过limit控制生成的总天数,最终计算得到连续日期序列,全程可在计算节点执行,不存在兼容问题。 - 扩展说明:如果需要生成跨度更长的日期序列,增加
pg_catalog.pg_class的交叉连接次数即可获得足够的行基数,性能稳定。
内容的提问来源于stack exchange,提问作者lydias
相关产品推荐
相关产品推荐

