Error: SPU Swap Partition: Disk Temporary Work Space is full by query having row_number() over (partition by) clause : Netezza

Error: SPU Swap Partition: Disk Temporary Work Space is full by query having row_number() over (partition by) clause : Netezza

使用的数据库:Netezza

以下查询抛出错误 作为

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

(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);

从计划文件中,我可以看到给定 table 有 1.7B 条记录,我觉得它正在处理 temp space 中的那么多记录,因此抛出了错误。

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

我有两个想法:

  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;