首页 > 其他分享 >GaussDB(DWS)迁移实践丨row_number输出结果不一致

GaussDB(DWS)迁移实践丨row_number输出结果不一致

时间:2023-05-29 15:11:46浏览次数:42  
标签:DWS no GaussDB transp number demand ORDER row

摘要:迁移前后结果集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本身运行结果不稳定

SELECT 
 no_tax_ind_amt,
 row_number() OVER(PARTITION BY s.actual_arrv_period_id, s.transp_demand_no ORDER BY s.transp_demand_no DESC) pck_rn
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)第一次执行

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'
;

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

 

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

标签:DWS,no,GaussDB,transp,number,demand,ORDER,row
From: https://www.cnblogs.com/huaweiyun/p/17440515.html

相关文章

  • 大整数 Bignumber
    #include<bits/stdc++.h>usingnamespacestd;structbig_number{boolis_postive;strings;big_number(){}big_number(stringss){if(ss[0]!='-'){this->s=ss;this->is_postive=true;}else{this->s=ss.substr(1......
  • GaussDB(DWS)条件表达式函数返回错误结果集排查
    摘要:条件表达式函数中出现结果集不一致问题,我们首先要考虑是否入参数据类型不一致导致出参不一致。本文分享自华为云社区《GaussDB(DWS)条件表达式函数返回错误结果集排查》,作者:yd_211369925。(一)案例背景客户使用greatest获取并返回参数列表中值最大的表达式的值,子查询中查询......
  • 2023年国际大学生程序设计竞赛(ACM-ICPC)新疆赛区 A.The Number Of Black Edges
    传送门大致题意:  爱丽丝得到一棵树,树上有n个节点,索引从1到n。树上的每条边可以是黑色或白色,所有的边最初都是白色的。有三种操作:1.将一条边的颜色改为黑色。2.将一条边的颜色改为白色。3.3.给定一个节点索引,计算从所有奇数节点到该节点的简单路径上的黑色边的数量之和。请......
  • 1342. Number of Steps to Reduce a Number to Zero刷题笔记
    easy题,按照逻辑写就行了classSolution:defnumberOfSteps(self,num:int)->int:step=0whilenum:ifnum%2==0:num=num/2else:num-=1step+=1returnste......
  • 详解GaussDB(DWS)用户监控原理及应用
    摘要:本文将聚焦于用户监控的原理及应用进行介绍。本文分享自华为云社区《GaussDB(DWS)监控工具指南(二)用户级监控》,作者:幕后小黑爪。前言资源监控是整个运维乃至整个产品生命周期重要的一环,事前及时语句发现故障,事后提供详实的数据用于追查定位问题。GaussDB(DWS)整个资源监控......
  • el-input的maxlength属性在number类型时需要特殊处理
    maxlength在开发中,输入框一定要限制长度,之前在开发中都没注意过输入字符串的时候直接使用maxlength就可以了但是type是number的时候,maxlength就不起作用了.number默认情况下,不管用户输入字符串还是数字,在获取的值都是字符串.number可以将字符串转换成数字但是我自己测试......
  • 看完这篇,DWS故障修复不再愁
    摘要:本文详细梳理分析了DWS服务面临软硬件故障场景和对应的修复原理,希望借此能够让你对DWS的集群故障修复有个全面深入的了解。本文分享自华为云社区《GaussDB(DWS)故障修复系统性介绍》,作者:闻鲜生。DWS是一个分布式架构的MPP集群,物理部署上涉及数百数千台主机和对应的磁盘,以及......
  • 关于Excel表格中对多个General或者Number数值格式的单元转换为Text文本时-值包含E+的
    对于单元格的值为默认的General或者Number数字时,我们可以直接选中,单元格,或者某个范围,可以直接将上面的格式处选择为Text这样就完成了一次格式转换,如下默认是General普通格式,我们直接就将其转换成Text文本格式不过只有当我们将鼠标双击一下单元格式,才会看到左上角看到熟悉的Text......
  • 2017第二届广东省强网杯线上赛--------phone number
    ================================个人收获:1.sql语句里面也可以直接用database()2.跟数据库有联系的地方都可能存在注入 ================================题目: 开始前对源码,http请求,路径。。这些都找过没什么有用的信息。就只有这个还有点用,再检查手机号使用人数页面的源码有这......
  • js number format All In One
    jsnumberformatAllInOne金融数据表示法千分位符号//1,000,000demos(......