从 Redshift 卸载到 S3 时 JDBC 连接丢失。应该发生啥?

Posted

技术标签:

【中文标题】从 Redshift 卸载到 S3 时 JDBC 连接丢失。应该发生啥?【英文标题】:JDBC connection lost while UNLOADing from Redshift to S3. What should happen?从 Redshift 卸载到 S3 时 JDBC 连接丢失。应该发生什么? 【发布时间】:2017-08-23 13:51:07 【问题描述】:

在这里换班新手 - 问候! 我正在尝试使用本地运行的 java 程序从 Redshift 将数据卸载到 S3,该程序通过 JDBC 连接发出 UNLOAD 语句。在某些时候,我的 JDBC 连接似乎丢失了(捕获到异常)。 但是,查看 S3 位置,似乎卸载运行完成。然而,我正在卸载一组相当小的数据,这是真的。 所以我的问题是,原则上,在连接丢失的情况下卸载应该如何表现(例如,防火墙将其杀死,甚至有人在执行卸载的进程上执行 kill -9)?它会运行到完成吗?它会在感知到连接丢失后立即停止吗?我无法通过rtfm'ing或谷歌搜索找到答案...... 谢谢!

【问题讨论】:

不是答案,但我在一个 SO 问题中读到,对于大型卸载,可以看到一批批进入 S3 的数据。如果是这样,如果查询在中途被终止,则意味着是的,您最终可能会得到部分完成的卸载 +1。 【参考方案1】:

UNLOAD 将一直运行,直到它完成、被取消或遇到错误。发出连接的丢失不会被解释为取消。

可以使用CANCELPG_CANCEL_BACKEND 在单独的连接上取消该语句。

http://docs.aws.amazon.com/redshift/latest/dg/r_CANCEL.html http://docs.aws.amazon.com/redshift/latest/dg/PG_CANCEL_BACKEND.html

【讨论】:

谢谢你,乔。如果我可以要求最后一件事 - 请您指出我可以在文档中找到该信息的位置吗?谢谢! 我将命令作为超链接,但我想这并不明显。所以我也添加了答案文本的链接。 ? 我注意到这两个链接,我还没有理解的一件事是:这种行为是否普遍适用于所有红移查询(它们不会在 jdbc 连接丢失时“停止”仅在CANCEL) 还是只是 UNLOAD 的事情? 不,查询将通常在失去连接时取消。 COPYUNLOAD 略有不同,因为它们在集群中运行在较低级别。

以上是关于从 Redshift 卸载到 S3 时 JDBC 连接丢失。应该发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Airflow 将数据从 Redshift 卸载到 S3

从 Redshift 卸载到 S3:身份验证不起作用

如何使用 aws unload 命令将数据从 AWS Redshift 卸载到 s3?

将数据从 Amazon redshift 卸载到 Amazon s3

AWS Redshift - 在卸载到 s3 时设置零件大小

使用 Spectrify 以 Parquet 格式将数据从 Redshift 卸载到 S3