我正在尝试对 26 列进行分组来执行查询。数据以按天分区的拼花格式存储在 S3 中。Redshift Spectrum 查询返回以下错误。我无法在 aws 中找到与此相关的任何相关文档。
S3 查询层中的请求内存不足
- 表中总行数:7.7亿
- Parquet 格式的表格总大小:45 GB
- 每个分区中的记录数:420 万
- 百万 Redshift 配置:单节点 dc2.xlarge
我正在尝试对 26 列进行分组来执行查询。数据以按天分区的拼花格式存储在 S3 中。Redshift Spectrum 查询返回以下错误。我无法在 aws 中找到与此相关的任何相关文档。
S3 查询层中的请求内存不足
尝试将此表中的文本列声明为 VARCHAR 而不是 STRING。还要确保为列使用尽可能小的 VARCHAR 大小,以减少 GROUP BY 所需的内存。
另外,还有两个建议:
建议始终使用至少 2 个 Redshift 节点。这为您提供了一个免费的领导节点,并允许您的计算节点使用其所有 RAM 进行查询处理。
按这么多列分组是一种不寻常的查询模式。如果您正在查找表中的重复项,请考虑将列散列为单个值并对其进行分组。这是一个例子:
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
;