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

Redshift中使用随机数据创建临时表失败,求解决办法

解决Redshift创建含日期与随机数临时表的报错问题

问题场景

执行以下查询可正常返回结果:

select * from
    (select now()::date - generate_series(0, 29) as date,
       CAST(RANDOM() * 10 AS INT)  as nmb) a;

但执行创建临时表的语句时触发错误:

create temp table nmbr_dates as
    (select GETDATE() - generate_series(0, 29) as date,
       CAST(RANDOM() * 10 AS INT)  as nmb);

错误信息:[0A000] ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables

简便解决方法

方法1:用子查询包装生成序列逻辑

将generate_series的生成逻辑放在子查询中,再关联计算日期和随机数:

CREATE TEMP TABLE nmbr_dates AS
SELECT (GETDATE()::DATE - gs.days) AS date,
       CAST(RANDOM() * 10 AS INT) AS nmb
FROM (SELECT generate_series(0, 29) AS days) gs;

方法2:先建空表再插入数据

先创建结构匹配的空临时表,再通过INSERT语句插入数据:

-- 先创建空表
CREATE TEMP TABLE nmbr_dates (date DATE, nmb INT);
-- 插入数据
INSERT INTO nmbr_dates
SELECT GETDATE()::DATE - generate_series(0, 29) AS date,
       CAST(RANDOM() * 10 AS INT) AS nmb;

原因说明

Redshift的CREATE TABLE AS (CTAS)操作采用并行执行策略,generate_series(行生成函数)和RANDOM()(节点级随机函数)在顶层查询中使用时,会因跨节点的函数分布逻辑冲突触发报错。通过子查询包装序列生成逻辑,或是改用INSERT方式,能让查询先在单个节点完成序列生成,再执行后续计算,规避分布冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:27:33