我正在尝试以以下格式yyyymmdd创建日期范围序列
insert into dim_SH (date_key)
SELECT to_char(('2012-01-01'::date + x)::date,'yyyymmdd')
FROM generate_series(1, 365*15, 1) x;
Amazon无效操作:Redshift表不支持指定的类型或功能(每个INFO消息一个)。 1条语句失败。
答案 0 :(得分:0)
的确,Redshift不支持GENERATE_SERIES
(这里Redshift documentation说不支持),因此,每当需要生成行时,都必须即时创建它们(如下所示):
WITH ten as (
select 1 union all
select 1 union all
select 1 union all
select 1 union all
select 1 union all
select 1 union all
select 1 union all
select 1 union all
select 1 union all
select 1
), ten_k as (
select row_number() over () as x
from ten a cross join
ten b cross join
ten c cross join
ten d
)
SELECT to_char(('2012-01-01'::date + x)::date,'yyyymmdd')
FROM ten_k limit 365*15;
或者,您可以从某处选择行:
SELECT x FROM (SELECT row_number() over () as x FROM arbitrary_table limit 10000) as ten_k
GENERATE_SERIES
吗?我震惊,看到您发布的查询:
SELECT to_char(('2012-01-01'::date + x)::date,'yyyymmdd')
FROM generate_series(1, 365*15, 1) x;
在遇到我们的Redshift(在1.0.7078版中)时确实有效。 Release notes在该区域中未提及任何新功能[:puzzled:]。
编辑:
显然,as of this question,generate_series
仅在领导节点上起作用,但是只要您的查询需要到达计算节点,该操作就会失败。
因此,如果不完全支持此功能,则认为它不受支持。