经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » SSDB » 查看文章
GaussDB(DWS)迁移实践丨row_number输出结果不一致
来源:cnblogs  作者:华为云开发者联盟  时间:2023/5/29 15:07:06  对本文有异议
摘要:迁移前后结果集row_number字段值前后不一致,前在DWS上运行不一致。

本文分享自华为云社区《GaussDB(DWS)迁移 - oracle兼容 --row_number输出结果不一致》,作者:譡里个檔 。

【问题表现】

迁移前后结果集row_number字段值前后不一致,前在DWS上运行不一致。

【问题分析】

这种问题大部分都是因为PARTITION BY 列 + ORDER BY 列组合起来不唯一,导致row_number()开窗函数结果集不稳定。

【解决方案】

如果不关注PARTITION BY 列 + ORDER BY 列组合值一样的记录的排序,那么可以使用函数rank()代替函数row_number(),二者的区别请戳这里;如果关注PARTITION BY 列 + ORDER BY 列组合值一样的记录的排序,那么需要增 ORDER BY 列,以保证同一个组内所有记录的唯一性。

【案例展示】

某客户反馈进行Orale迁移前,如下SQL结果集稳定;迁移后DWS运行结果和oracle不一致,且DWS本身运行结果不稳定

  1. SELECT
  2. no_tax_ind_amt,
  3. row_number() OVER(PARTITION BY s.actual_arrv_period_id, s.transp_demand_no ORDER BY s.transp_demand_no DESC) pck_rn
  4. FROM fin_dwl_cbchnl.dwl_cbg_cst_tms_freigh_expen_f s
  5. LEFT JOIN dwrdim_dw1.dwr_dim_company_d c ON s.ship_company_key = c.company_key
  6. LEFT JOIN dwrdim_dw1.dwr_dim_supplier_d d ON s.supplier_key = d.supplier_key
  7. WHERE actual_arrv_period_id = 202109
  8. AND s.transp_demand_no='0FF7640001270MCHN01H'
  9. ;

前后两次执行结果

1)第一次执行

2)第二次执行

问题定位分析方位为执行如下语句

  1. SELECT
  2. no_tax_ind_amt,
  3. s.actual_arrv_period_id, s.transp_demand_no, s.transp_demand_no, -- PARTITION BY + ORDER BY
  4. row_number() OVER(PARTITION BY s.actual_arrv_period_id, s.transp_demand_no ORDER BY s.transp_demand_no DESC) pck_rn,
  5. rank() OVER(PARTITION BY s.actual_arrv_period_id, s.transp_demand_no ORDER BY s.transp_demand_no DESC) pck_rk
  6. FROM fin_dwl_cbchnl.dwl_cbg_cst_tms_freigh_expen_f s
  7. LEFT JOIN dwrdim_dw1.dwr_dim_company_d c ON s.ship_company_key = c.company_key
  8. LEFT JOIN dwrdim_dw1.dwr_dim_supplier_d d ON s.supplier_key = d.supplier_key
  9. WHERE actual_arrv_period_id = 202109
  10. AND s.transp_demand_no='0FF7640001270MCHN01H'
  11. ;

可以看出相同的开窗逻辑下rank()值都1,而且所有记录中s.actual_arrv_period_id, s.transp_demand_no, s.transp_demand_no(即PARTITION BY 列 + ORDER BY 列)的值都是一样的

 

点击关注,第一时间了解华为云新鲜技术~

原文链接:https://www.cnblogs.com/huaweiyun/p/17440515.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号