AWS Redshift CTAS 查询在集群查询选项卡中完成,但仍从客户端 sql 工作台/j 运行。该表也未创建

Posted

技术标签:

【中文标题】AWS Redshift CTAS 查询在集群查询选项卡中完成,但仍从客户端 sql 工作台/j 运行。该表也未创建【英文标题】:AWS Redshift CTAS query complete in cluster query tab but still running from the client sql workbench/j.The table is also not getting created 【发布时间】:2019-02-05 10:25:09 【问题描述】:

我的查询中有一个交叉联接。这是修改后的查询:

create table abc.abcd as with temp1 as 
(select
1 as bid, *
from
abc.data_1 ), temp2 as (select
1 as aid, *
from
abc.data_2 b), temp3 as ( select
a.*,
b.*
from temp2 a
join
temp1 b on a.aid=b.bid) 
select * from temp3

在redshift查询历史中查询已成功完成,但查询状态仍在sqlworkbench/J中运行。

在查询新创建的表时,我收到一个对象不存在的错误。我正在使用 4 节点 dc2.large 集群。这里可能出了什么问题?

更新 1:如果我正在运行相同的查询,但使用了限制子句,则查询返回的输出很好,并且正在创建表。

这里是使用限制子句的查询:

create table abc.abcd as with temp1 as 
(select
1 as bid, *
from
abc.data_1 ), temp2 as (select
1 as aid, *
from
abc.data_2 b), temp3 as ( select
a.*,
b.*
from temp2 a
join
temp1 b on a.aid=b.bid) 
select * from temp3 limit 200

【问题讨论】:

您可能在等待时失去了连接?您是否在 sqlworkbench/j 中打开了自动提交,如果没有,那么这可能就是该表现在消失的原因。?见docs.aws.amazon.com/redshift/latest/mgmt/…的第10点 这是我客户端中的 sqlworkbench/J 选项 - imgur.com/XHdJUFj 尝试使用 ec2 实例来运行相同的实例(使用 tmux/screen + psql) - 你应该会发现它工作正常。几乎可以肯定它是由于连接中断造成的。 但是在我的 sqlworkbench/J 客户端中重置连接后,该表应该是可用的,因为在 Redshift 中完成了查询,对吧?更离奇的是,它甚至在客户端都不可用。 @JonScott 我用 EC2 实例再次尝试了同样的事情,它成功了!谢谢你的建议。 【参考方案1】:

我创建了一个 EC2 实例并在其上安装了 sqlworkbench/J 并运行了相同的查询,它按预期工作。

我怀疑这是网络问题的原因。查询已提交到集群,但由于网络问题,“自动提交”没有从 sqlworkbench/J 客户端发送到集群。当我在 EC2 实例中运行查询时,甚至我的 RDP 连接也多次中断。所以看起来是网络问题导致了异常行为。

【讨论】:

以上是关于AWS Redshift CTAS 查询在集群查询选项卡中完成,但仍从客户端 sql 工作台/j 运行。该表也未创建的主要内容,如果未能解决你的问题,请参考以下文章

由于运行查询,Redshift 集群更大

我们可以在 Amazon redshift 中使用 CTAS 创建表时使用压缩吗

定期运行 Redshift 查询

AWS Redshift 查询过长异常

定期将查询结果从 Redshift 移动到 S3 存储桶

从 db 中检索 Redshift 集群指标