首页 > 解决方案 > 错误:SPU 交换分区:磁盘临时工作空间已满,查询包含 row_number() over (partition by) 子句:Netezza

问题描述

使用的数据库:Netezza

下面的查询抛出错误为

错误:SPU 交换分区:磁盘临时工作空间已满

(SELECT A.*,ROW_NUMBER() OVER (PARTITION BY MDLX_CASE_NB ORDER BY PAID DESC) AS RNK_NEW
FROM ANLA1.FPA_RANK_OLD A)
DISTRIBUTE ON (CLAIM_NB);

从计划文件中,我可以看到给定的表有 1.7B 条记录,我觉得它正在处理临时空间中的那么多记录,因为抛出了错误。

如果我的理解是正确的,那么我们可以有上述查询的任何替代方案或任何其他解决方案吗?

标签: netezzarow-number

解决方案


我有两个想法:

  1. MDLX_CASE_NB 分布不均匀。通过执行“select MDLX_CASE_NB,count(*) numbof FROM ANLA1.FPA_RANK_OLD A group by 1 order by numbof Desc”来测试它。在这种情况下,请返回结果,我们可以讨论该怎么做
  2. A.* 后面的列非常宽。在这种情况下,您可以尝试将上述查询更改为使用 Rowid 并将其加入:

create temp table x as SELECT Rowid as row_id,ROW_NUMBER() OVER (PARTITION BY MDLX_CASE_NB ORDER BY PAID DESC) AS RNK_NEW FROM ANLA1.FPA_RANK_OLD A DISTRIBUTE ON (random); Select A.*, RNK_NEW From ANLA1.FPA_RANK_OLD A Join x On x.row_id=a.rowid;


推荐阅读