从Redshift Spectrum获取“磁盘已满”错误

时间:2019-06-26 09:47:25

标签: amazon-web-services amazon-redshift amazon-redshift-spectrum

我面临Redshift Spectrum上频繁出现public static function dataMethodName(): array { return [ [ 'input', 'output', ], ] } 的问题,因此,我不得不反复扩大集群规模。似乎缓存将被删除。

理想情况下,我想扩大规模以保持缓存,并找到一种方法来知道查询中需要多少磁盘空间。

是否有任何文档讨论Redshift Spectrum的缓存,或者他们使用相同的机制进行Redshift?

编辑:根据乔恩·斯科特的要求,我正在更新我的问题

Disk Full error

S3上的压缩数据总量约为1.8 TB。雅典娜花了10分钟时间,扫描了700 GB,并告诉我SELECT p.postcode, SUM(p.like_count), COUNT(l.id) FROM post AS p INNER JOIN likes AS l ON l.postcode = p.postcode GROUP BY 1;

编辑2:我使用了16 TB SSD群集。

1 个答案:

答案 0 :(得分:1)

您没有提到正在使用的Redshift集群的大小,但是简单的答案是使用更大的Redshift集群(更多节点)或使用更大的节点类型(每个节点更多磁盘)。

之所以出现此问题,是因为Redshift Spectrum无法将完全联接执行向下推到Spectrum层。大部分数据只是为了执行联接而返回给Redshift集群。

您还可以重组查询,以便可以进行更多工作,在这种情况下,可以在加入之前进行分组和计数。如果每个子查询输出的总行数比要为联接返回的行数少得多,这将是最有效的。

SELECT p.postcode
     , p.like_count
     , l.like_ids
FROM (--Summarize post data
      SELECT p.postcode
           , SUM(p.like_count)
      FROM post AS p 
      GROUP BY 1
     ) AS p
INNER JOIN (--Summarize likes data
            SELECT l.postcode
                 , COUNT(l.id) like_ids
            FROM likes AS l 
            GROUP BY 1
          ) AS l
    -- Join pre-summarized data only
    ON l.postcode = p.postcode
;