0

我面临Disk Full errorRedshift Spectrum 频繁上的问题,因此我不得不反复扩展集群。似乎缓存将被删除。

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

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

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

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;

S3 上的压缩数据总量约为 1.8 TB。Athena 花了 10 分钟,扫描了 700 GB 并告诉我Query exhausted resources at this scale factor

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

4

1 回答 1

1

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

出现此问题的原因是 Redshift Spectrum 无法将完整连接执行下推到 Spectrum 层。大部分数据被返回到 Redshift 集群只是为了执行连接。

您还可以重组查询,以便可以将更多工作下推到 Spectrum,在这种情况下,通过在加入之前进行分组和计数。如果每个子查询输出的总行数明显少于连接返回的行数,这将是最有效的。

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
;
于 2019-06-27T16:06:46.730 回答