Amazon Redshift中的generate_series函数

DJo*_*DJo 7 generate-series amazon-redshift

我试过以下:

SELECT * FROM generate_series(2,4);
generate_series
-----------------
           2
           3
           4
(3 rows)

SELECT * FROM generate_series(5,1,-2);                                                             
generate_series
-----------------
           5
           3
           1
(3 rows)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试时,

select * from generate_series('2011-12-31'::timestamp, '2012-12-31'::timestamp, '1 day');
Run Code Online (Sandbox Code Playgroud)

它产生了错误.

ERROR:  function generate_series(timestamp without time zone, timestamp without time zone, "unknown") does not exist
HINT:  No function matches the given name and argument types. You may need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

我在Redshift 1.0.757上使用PostgreSQL 8.0.2.
知道为什么会这样吗?

更新:

generate_series现在正在使用Redshift.

SELECT CURRENT_DATE::TIMESTAMP  - (i * interval '1 day') as date_datetime 
FROM generate_series(1,31) i 
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

这将生成最近30天的日期

a_h*_*ame 19

generate_series()Postgres 8.4中添加了支持日期和时间戳的版本.

由于Redshift基于Postgres 8.0,您需要使用不同的方式:

select timestamp '2011-12-31 00:00:00' + (i * interval '1 day')
from  generate_series(1, (date '2012-12-31' - date '2011-12-31')) i;
Run Code Online (Sandbox Code Playgroud)

如果您"只"需要日期,则可以缩写为:

select date '2011-12-31' + i
from  generate_series(1, (date '2012-12-31' - date '2011-12-31')) i;
Run Code Online (Sandbox Code Playgroud)

  • 您是否能够将 generate_series 中的结果集插入到表中?当我尝试将其保存到表中或在连接条件中使用它时出现以下错误 - [Amazon](500310) 无效操作:Redshift 表不支持指定的类型或函数(每条 INFO 消息一个) (2认同)

DJo*_*DJo 5

generate_series 现在正在使用 Redshift。

SELECT CURRENT_DATE::TIMESTAMP  - (i * interval '1 day') as date_datetime 
FROM generate_series(1,31) i 
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

这将生成过去 30 天的日期

  • 看来generate_series()函数仅在**leader节点**上受支持。从generate_series() 中进行选择可以工作,但是如果我尝试将结果插入表中,则会失败。用户定义的表操作将在计算节点上运行。 (2认同)