Redshift UNLOAD 操作期间内存不足

Posted

技术标签:

【中文标题】Redshift UNLOAD 操作期间内存不足【英文标题】:Ran out of memory during Redshift UNLOAD operation 【发布时间】:2019-12-18 09:06:27 【问题描述】:

这是我正在使用的命令:

unload ('select * from SPEC_BFO.CASE_HISTORY where (INTEGRATION_ID,LAST_OPERATION_DATE) IN (SELECT INTEGRATION_ID,max(LAST_OPERATION_DATE) from SPEC_BFO.CASE_HISTORY group by INTEGRATION_ID)') to 's3://use-s3-dwnam-qa/NAM/SPEC_BFO/CASE_HISTORY/VIEW_CASE_HISTORY/VIEW_CASE_HISTORY.' iam_role 'arn:aws:iam::111111111111:role/use-redshift-dwnam-qa' delimiter '|' PARALLEL OFF header ALLOWOVERWRITE gzip;

收到此错误:

('There is a problem:', InternalError('S3 Query Exception (Fetch)\nDETAIL:  \n  -----------------------------------------------\n  error:  S3 Query Exception (Fetch)\n  code:      15001\n  context:   Request ran out of memory in the S3 query layer.\n  query:     8163346\n  location:  dory_util.cpp:1083\n  process:   asyncrequest_thread [pid=112556]\n  -----------------------------------------------\n\n',))

远程脚本调用失败,此脚本将停止。

【问题讨论】:

您似乎想要执行与DISTINCT ON 等效的操作,但遗憾的是 Redshift 不支持。您也许可以使用窗口函数来实现相同的目标,而不必使用如此复杂的IN 语句。 您是否尝试过不带PARALLEL OFF参数的查询是否有效? @botchniaque 是的,我尝试关闭并列,但还是失败了 【参考方案1】:

查询可能过于复杂,无法与UNLOAD 操作结合使用。

尝试首先使用CREATE TABLE AS 命令创建输出表,然后通过SELECT * 创建该表UNLOAD

【讨论】:

以上是关于Redshift UNLOAD 操作期间内存不足的主要内容,如果未能解决你的问题,请参考以下文章

UNLOAD 命令是不是从 redshift 中删除或删除数据?

Redshift UNLOAD 语句在 19 分钟后被取消

Redshift 的 UNLOAD Query 生成的 S3 请求数

Redshift Unload:仅在第一个分区中添加标头,不包括其余部分

带有区分大小写的标头的 Redshift Unload

使用 UNLOAD 命令将 AWS Redshift 数据导出到 S3 时输出不正确