生成带有日期和小时的时间序列并在 Amazon Redshift 中创建表
Posted
技术标签:
【中文标题】生成带有日期和小时的时间序列并在 Amazon Redshift 中创建表【英文标题】:Generate time series with date and hour and create table in Amazon Redshift 【发布时间】:2018-09-23 23:31:26 【问题描述】:我想在 Amazon Redshift 中生成日期和小时表。以下查询适用于 Postgresql 9.1 及更高版本,但不幸的是,我们仅限于 Amazon Redshift,这会导致错误:“函数 generate_series 不存在”。非常感谢您帮助在 8.02 中生成时间序列(如结果表)。
SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
'2008-03-04 12:00', '10 hours');
generate_series
generate_series
---------------------
2008-03-01 00:00:00
2008-03-01 10:00:00
2008-03-01 20:00:00
2008-03-02 06:00:00
2008-03-02 16:00:00
2008-03-03 02:00:00
2008-03-03 12:00:00
2008-03-03 22:00:00
2008-03-04 08:00:00
编辑: 我能够使用以下代码生成我想要的时间序列,但无法将它们创建到 Redshift 中的表中。错误消息是:
“Redshift 表不支持指定的类型或函数(每条 INFO 消息一个)。”
SELECT '2017-01-01 00:00:00'::timestamp + x * interval'1 hour' AS Date_Time
FROM generate_series(0, 1000 * 24) AS g(x)
任何想法如何将其创建到 Redshift 中的表中?谢谢。
【问题讨论】:
不要用 PostgreSQL 8.0 开发新东西 请不要使用这个版本! 抱歉,我忘了提到我们正在使用不支持 generate_series 的 Amazon Redshift 创建表。 i686-pc-linux-gnu 上的 PostgreSQL 8.0.2,由 GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)、Redshift 1.0.3906 编译。 Using sql function generate_series() in redshift的可能重复 silota.com/docs/recipes/… 【参考方案1】:这样的脚本可能会对您有所帮助,
CREATE or REPLACE function gen_ser() returns integer
as
$body$
declare
query varchar;
i integer := 0;
begin
loop
exit when i >= 100;
i:=i+10;
query :='Insert into table select ''01-01-2018''::timestamptz + '''|| i ||' hours'' ::interval;';
execute query;
end loop;
return 1;
end;
$body$
language plpgsql;
【讨论】:
【参考方案2】:免责声明:请不要再使用此版本!
适用于 Postgres 8.4(无法检查 8.0,但应该也可以)
demo: db<>fiddle
SELECT start_date + gs * interval '10 hours'
FROM (
SELECT '2008-03-01 00:00:00'::timestamp as start_date, generate_series(1,10, 1) as gs
) s
generate_series
从 1 到 10 并根据您的起始时间戳加入结果。结果是一个包含两列的表格:一列从每一行开始,一列包含从 1 到 10 的数字。
现在您可以将生成的数字乘以您的区间并将其添加到开头。
编辑: The problem is discussed already
【讨论】:
@LeoJones 这对你有用吗?generate_series
应该适用于整数范围(即使不适用于日期范围)IIRC。
谢谢,S 人。我得到了查询,但无法在 Redshift 中创建一个表(请参阅编辑)。
@LeoJones 请描述您尝试创建表的内容。
@LeoJones 在 *** 上创建第二个问题会更好,因为不允许在一个线程中提出不同的问题。如果它解决了您的起源问题,请投票/接受它并发布一个新问题(也许指的是这个)以上是关于生成带有日期和小时的时间序列并在 Amazon Redshift 中创建表的主要内容,如果未能解决你的问题,请参考以下文章
AWS Cognito:生成令牌并在使用 amazon-cognito-identity-js SDK 刷新后