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 Query 生成的 S3 请求数