Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法在红移中使用generate_series()插入数据_Sql_Amazon Redshift - Fatal编程技术网

Sql 无法在红移中使用generate_series()插入数据

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

我正在尝试使用下面的查询插入未来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 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的人保持联系。我投票决定结束。