Redshift - 终止启动 Redshift 查询的应用程序并不会终止它

Posted

技术标签:

【中文标题】Redshift - 终止启动 Redshift 查询的应用程序并不会终止它【英文标题】:Redshift - Killing the application that initiated the Redshift query does not kill it 【发布时间】:2015-10-26 12:36:01 【问题描述】:

我有一个执行 Redshift COPY 命令的 java 应用程序。该应用程序不是作为服务编写的,因此我强制终止该进程以停止它。 Java 应用程序立即被杀死,但是即使在 Java 应用程序被杀死时 Redshift COPY 命令仍在进行中,它仍会继续在 Redshift 上运行并成功完成。

这不是我所期望的行为。我期待一旦终止与 Redshift 的连接,COPY 命令将随之终止,并且 COPY 命令将回滚。

我需要一些设置吗?

【问题讨论】:

【参考方案1】:

在分布式系统中,客户端-服务器应用程序被认为是分布式系统,您通常不依赖节点之间的持续通信。如果您在一侧终止 JDBC 客户端,服务器不会自动取消您的 SQL 查询,因为它不知道您是否终止了查询生成器,或者您只是有一些网络中断。如果每次出现短暂的网络故障时,您都必须再次运行 COPY 命令,这将非常烦人,在某些情况下这可能需要几分钟/几小时。

取消查询的“正确”方式是CANCEL您的查询。

【讨论】:

CANCEL 查询是否只能手动使用?或者有没有办法让它与应用程序的终止信号挂钩?似乎 CANCEL 需要查询的进程 ID,只能通过 stv_recents 表获得? 您还可以从 Web 控制台找到 pid(以及取消选项)。这是一个简单的 SQL 命令,您必须通过某个连接发送。这就是为什么我发现很难附加到终止信号的原因。 谢谢。我希望将它与 kill 信号挂钩,但我想我唯一的选择是等到 COPY 命令完成后再让我的应用程序关闭。谢谢

以上是关于Redshift - 终止启动 Redshift 查询的应用程序并不会终止它的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Batch 上运行时,Redshift 频谱查询永远不会终止

将查询从 MySQL 导出到 Redshift

Redshift/Java:SQL 执行挂起并且永不返回

Postgres SQL (Amazon Redshift) 在启动时运行命令

使用java程序在redshift中创建视图的查询大小应该是多少

有没有办法使用 cli 关闭和启动 AWS redshift 集群?