GaussDB(DWS)迁移过程丨row_number输出结果不一致
【问题表现】
迁移前后结果集row_number字段值不一致,在DWS上运行前不一致。
【问题分析】
这个问题大部分是因为PARTITION BY列+ORDER BY列的组合不唯一,导致得到的row_number()窗口函数设置不稳定。
【解决办法】
如果不注重PARTITION BY + ORDER BY列组合值相同的记录的排序,可以使用rank()函数代替row_number()函数。点击这里查看两者的区别; if 注意 DISTRIBUTION BY 列 + ORDER BY 列组合值相同的记录排序。然后,您需要添加 ORDER BY 列以确保同一组中的所有记录都是唯一的。 ? 1) 第一次执行
2) 第二次执行
问题的地方和分析的方向是执行下面的命令
SELECT
no_tax_ind_amt,
s.actual_arrv_period_id, s.transp_demand_no, s.transp_demand_no, -- PARTITION BY 列 + ORDER BY 列
row_number() OVER(PARTITION BY s.actual_arrv_period_id, s.transp_demand_no ORDER BY s.transp_demand_no DESC) pck_rn,
rank() OVER(PARTITION BY s.actual_arrv_period_id, s.transp_demand_no ORDER BY s.transp_demand_no DESC) pck_rk
FROM fin_dwl_cbchnl.dwl_cbg_cst_tms_freigh_expen_f s
LEFT JOIN dwrdim_dw1.dwr_dim_company_d c ON s.ship_company_key = c.company_key
LEFT JOIN dwrdim_dw1.dwr_dim_supplier_d d ON s.supplier_key = d.supplier_key
WHERE actual_arrv_period_id = 202109
AND s.transp_demand_no='0FF7640001270MCHN01H'
;
可以看到,用窗口同样的逻辑,排名()值为1且所有记录值s.actual_arrv_period_id、s.transp_demand_no、s.transp_demand_no(即PARTITION BY + ORDER BY)都相同
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。