【问题标题】:Getting a "Disk Full" error from Redshift Spectrum从 Redshift Spectrum 获取“磁盘已满”错误
【发布时间】:2019-06-26 09:47:25
【问题描述】:

我正面临 Redshift Spectrum 上频繁出现Disk Full error 的问题,因此我不得不反复扩展集群。好像缓存会被删除。

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

是否有任何文档讨论 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 集群。

【问题讨论】:

  • 我认为红移光谱上没有任何缓存(除非您以某种方式自己管理)-您能否详细说明您的用例并提供示例?你用的是什么工具?
  • 我有两个包含 xz json 文件的 s3 文件夹,映射到两个 external tables。压缩数据的总量约为 1.8 TB。我从表中选择两列,并执行SUM 函数。我使用的是纯 Redshift Spectrum。
  • 请提供您正在使用的确切 sql。并在 athena 中尝试相同的操作并返回结果。 (请使用此信息编辑您的问题)

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


【解决方案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
;

【讨论】:

  • 嗨乔!谢谢你。我已经相应地编辑了我的问题
  • 我还了解到应该创建一个只包含他们需要的数据的表,而不是一个包含 JSON 中任何内容的表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2019-11-18
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多