Redshift Spectrum 查询 - 请求 运行 S3 查询层内存不足

Redshift Spectrum Query - Request ran out of memory in the S3 query layer

我正在尝试对 26 列进行分组来执行查询。数据以按天分区的镶木地板格式存储在 S3 中。 Redshift Spectrum 查询返回以下错误。我无法在 aws 中找到与此相关的任何文档。

Request ran out of memory in the S3 query layer

  1. table 中的总行数:7.7 亿
  2. Parquet 格式 table 的总大小:45 GB
  3. 每个分区中的记录数:420 万
  4. 百万 Redshift 配置:单节点 dc2.xlarge

附上tableddl

尝试将此 table 中的文本列声明为 VARCHAR 而不是 STRING。还要确保为列使用尽可能小的 VARCHAR 大小,以减少 GROUP BY 所需的内存。

此外,还有两个建议:

  1. 建议始终使用至少 2 个 Redshift 节点。这给 你是一个免费的领导节点,并允许你的计算节点使用所有 他们的 RAM 用于查询处理。

  2. 按这么多列分组是一种不寻常的查询模式。如果您要在 table 中查找重复项,请考虑将列散列为单个值并对其进行分组。这是一个例子:

    SELECT MD5(ws_sold_date_sk
             ||ws_sold_time_sk
             ||ws_ship_date_sk
             ||ws_item_sk
             ||ws_bill_customer_sk
             ||ws_bill_cdemo_sk
             ||ws_bill_hdemo_sk
             ||ws_bill_addr_sk
             ||ws_ship_customer_sk
             ||ws_ship_cdemo_sk
             ||ws_ship_hdemo_sk
             ||ws_ship_addr_sk
             ||ws_web_page_sk
             ||ws_web_site_sk
             ||ws_ship_mode_sk)
         , COUNT(*)
    FROM spectrum.web_sales
    GROUP BY 1
    ORDER BY 2 DESC
    LIMIT 10
    ;