0

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

S3 查询层中的请求内存不足

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

附表ddl 在此处输入图像描述

4

1 回答 1

2

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

另外,还有两个建议:

  1. 建议始终使用至少 2 个 Redshift 节点。这为您提供了一个免费的领导节点,并允许您的计算节点使用其所有 RAM 进行查询处理。

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

    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
    ;
    
于 2018-10-18T16:42:31.697 回答