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

时间:2018-10-18 06:01:04

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

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

  

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

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

表ddl随附 enter image description here

1 个答案:

答案 0 :(得分: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
    ;