尝试创建日期序列yyyymmdd

时间:2019-04-23 22:39:27

标签: sql amazon-redshift

我正在尝试以以下格式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条语句失败。

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 questiongenerate_series仅在领导节点上起作用,但是只要您的查询需要到达计算节点,该操作就会失败。

因此,如果不完全支持此功能,则认为它不受支持