我面临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群集。
答案 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
;