Sql 无法在红移中使用generate_series()插入数据
我正在尝试使用下面的查询插入未来10天的所有日期Sql 无法在红移中使用generate_series()插入数据,sql,amazon-redshift,Sql,Amazon Redshift,我正在尝试使用下面的查询插入未来10天的所有日期 INSERT INTO sda.all_dates (checkin) SELECT CURRENT_DATE + generate_series(0, 10) AS checkin; 但做不到,出错了 INFO: Function "generate_series(integer,integer)" not supported. ERROR: Specified types or functions (one per INFO mess
INSERT INTO sda.all_dates (checkin)
SELECT CURRENT_DATE + generate_series(0, 10) AS checkin;
但做不到,出错了
INFO: Function "generate_series(integer,integer)" not supported.
ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables.
当我只执行SELECT part时,它会给出正确的结果
SELECT CURRENT_DATE + generate_series(0, 10) AS checkin;
Amazon Redshift不支持您正在查找的内容 请参阅:
generate_series()
是Amazon Redshift不支持的众多postgres函数之一Amazon Redshift不支持您需要的功能
请参阅:
generate_series()
是Amazon Redshift不支持的众多postgres函数之一当您仅执行SELECT
时,查询将在leader节点上执行,因为不需要表扫描,这就是您获得正确结果的原因。
但是,当涉及红移表时(如
插入到),使用generate_series()的查询将在compute节点上执行,红移中不支持该函数。
如果我做了一个错误的假设,请评论,我将重新聚焦我的答案。当您仅执行选择时,查询将在leader节点上执行,因为不需要扫描表,这就是为什么您会得到正确的结果。
但是,当涉及红移表时(如插入到),使用generate_series()的查询将在compute节点上执行,红移中不支持该函数。
如果我做了一个错误的假设,请评论,我将重新关注我的答案。生成器在红移中不受支持,如上所述
您有两种选择:
1) 像这样的小技巧:
with
series as (
select 1 as n
union select 2
union select 3
)
select (current_date+interval '1 day'*n)::date
from series
2) 创建一个存储日历每个日期的维度表,这样您就可以得到如下内容:
select date
from dim.calendar
where date between current_date and current_date+interval '10 day'
您可以通过在Postgres中运行generate_series()
,将结果复制到CSV并将该CSV加载到Redshift来创建这样的表,必须执行一次。除了日期之外,根据您的目标,您还可以从日期(一周的第一天、一个月、一个季度等)衍生不同的日期
UPD:Redshift支持generate_series(),如上文所述,现在在Redshift中不支持生成器
您有两种选择:
1) 像这样的小技巧:
with
series as (
select 1 as n
union select 2
union select 3
)
select (current_date+interval '1 day'*n)::date
from series
2) 创建一个存储日历每个日期的维度表,这样您就可以得到如下内容:
select date
from dim.calendar
where date between current_date and current_date+interval '10 day'
您可以通过在Postgres中运行generate_series()
,将结果复制到CSV并将该CSV加载到Redshift来创建这样的表,必须执行一次。除了日期之外,根据您的目标,您还可以从日期(一周的第一天、一个月、一个季度等)衍生不同的日期
UPD:Redshift现在支持generate_series()为了克服这个限制,我将包含generate_series()
的查询输出导出到本地主机,将其上载到Redshift,并通过复制命令插入数据。我尝试使用unload()
,但是当您使用generate_series()
时,该命令也失败。为了克服这个限制,我将包含generate_series()
的查询输出导出到本地主机,将其上载到redshift,并通过copy命令插入数据。我尝试使用了unload()
,但是当您使用generate_series()
时,该命令也失败了。是否有错误?如果是这样,请将其包含在您的邮件中。@GordonLinoff添加了错误。@AshutoshSIngh:如果下面的回答有助于您实现所需目标,请接受我的回答。这样,它就不会在线程中丢失,并且会帮助其他有类似问题的人:)Redshift没有版本控制,因此旧版本永远不能被任何人使用。我不明白为什么这个问题现在应该与支持generate_series的人保持联系。我投票决定结束。你有错误吗?如果是这样,请将其包含在您的邮件中。@GordonLinoff添加了错误。@AshutoshSIngh:如果下面的回答有助于您实现所需目标,请接受我的回答。这样,它就不会在线程中丢失,并且会帮助其他有类似问题的人:)Redshift没有版本控制,因此旧版本永远不能被任何人使用。我不明白为什么这个问题现在应该与支持generate_series的人保持联系。我投票决定结束。