目录

group by后乱序问题原因和解决

1.解决方案

1.1 放到集合内排序

1.2 在分组内排序后在分组求和

2.问题经历和原因

3.用到的表和数据


group by后乱序问题原因和解决

1.解决方案

先说一下解决的办法

1.1 放到集合内排序

SELECT  uid,regexp_replace(concat_ws(',',sort_array(collect_list(concat_ws(':',lpad(CAST(rn AS STRING),3,'0'),page_id)))),'\\d+\:','')
FROM    tmp_t
WHERE   uid IS NOT NULL
GROUP BY uid
;

1.2 在分组内排序后在分组求和

SELECT  uid,collect_list(page_id) AS page_id
FROM    (SELECT  *,ROW_NUMBER() OVER (PARTITION BY uid ORDER BY rn) AS rankFROM    tmp_tWHERE   uid IS NOT NULL)
GROUP BY uid
;

2.问题经历和原因

求用户的访问轨迹以特殊分隔符隔开(已经有数仓表记录用户访问顺序)

SELECT  uid,collect_list(page_id) AS visit_track
FROM    tmp_t
;

我以为这时已经排好序的表,是直接按照接过排序,可是我发现这个顺序根本对不上

一开始我想过是因为 collect_list 的原因,但是'解决方案里在分组内排序后在分组求和'就是正常的

而且由此可以知道原因还是 group by 的问题,它导致了我已经排序好插入表里的数据分组后取值时顺序变了

数据量大我是可以理解的,要分组打散,但是数据量小的时候在spark跑时有序的,在odps上就无序了

3.用到的表和数据

## 模仿一下数仓用户访问顺序表
CREATE TABLE IF NOT EXISTS tmp_t
(uid        STRING,page_id    STRING,rn BIGINT
) ;insert overwrite table tmp_t values
('1422','4888','1'),
('1422','4883','2'),
('1422','4881','3'),
('1057','3305','1'),
('1057','3342','2'),
('1057','3261','3'),
('1057','3262','4'),
('1057','3316','5'),
('1057','3467','6'),
('1057','4882','7'),
('1057','3265','8'),
('1057','3422','9'),
('1061','3461','1'),
('1061','3100','2'),
('1085','1952','1'),
('1097','3177','1'),
('1097','3246','2'),
('1097','3080','3'),
('1097','3321','4'),
('1097','3370','5'),
('1097','4634','6'),
('1097','3471','7'),
('1097','3079','8'),
('1097','3076','9'),
('1151','3048','1'),
('1151','3232','2'),
('1151','3457','3'),
('1151','3307','4'),
('1153','4939','1'),
('1153','4934','2'),
('1153','4938','3'),
('1153','4543','4'),
('1153','4942','5'),
('1153','4460','6'),
('1153','5107','7'),
('1083','3439','1'),
('1093','4927','1'),
('1093','3278','2'),
('1059','3365','1'),
('1059','3371','2'),
('1059','3182','3'),
('1059','3092','4'),
('1059','3089','5'),
('1059','3377','6'),
('1059','3348','7'),
('1059','4323','8'),
('1059','3395','9'),
('1079','4276','1'),
('1067','4261','1'),
('1117','4901','1'),
('1117','5120','2'),
('1117','5109','3'),
('1117','5108','4'),
('1117','4840','5'),
('1117','4923','6'),
('1117','4703','7'),
('1117','4922','8'),
('1117','4920','9'),
('1065','4243','1'),
('1065','4631','2'),
('1155','3052','1'),
('1155','3053','2'),
('1155','3413','3'),
('1155','3055','4'),
('1155','3056','5'),
('1155','3176','6'),
('1155','3054','7'),
('1155','3406','8'),
('1155','4281','9'),
('1147','3456','1'),
('1149','3299','1'),
('1149','3470','2'),
('1149','3315','3'),
('1149','3292','4'),
('1149','3268','5'),
('1149','3057','6'),
('1149','3060','7'),
('1149','3181','8'),
('1149','3405','9'),
('1145','3303','1'),
('1099','3131','1');

group by后乱序问题原因和解决相关推荐

  1. pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决

    pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...

  2. 系统重装后没有睡眠选项原因及解决方法

    系统重装后没有睡眠选项原因及解决方法 给笔记本电脑重装了windows10专业版系统,安装完后,发现电源选项没有睡眠按钮 1.分析 电脑安装完系统后,还没有下载和安装一些补丁和更新,导致问题的出现 2 ...

  3. gdc服务器开机后显示器无法显示,开机后显示器没反应怎么办?开机后显示器没反应原因及解决方法...

    现在使用电脑的人很多,几乎每家每户都有台式电脑或者手提电脑.有时候我们开机之后 显示器 没有反应.这时候要怎么办?电脑开始之后显示器没反应很可能是内存卡和内存条之间的连接除了问题,并不是什么很严重的问 ...

  4. PDF转成Word或PPT后不能修改的原因和解决方法

    现在很多文档都是用PDF格式,虽然查看比较方便,但编辑起来相对麻烦,所以我们经常会将PDF转换成Word或者PPT后再修改,但是有时候无论转成Word或PPT都还是不能修改是怎么回事呢?要怎么解决呢? ...

  5. 理光打印机连接电脑后不打印的原因及解决方法

    理光打印机在使用时,可能会出现正常连接上理光打印机却没有反应的情况,出现无法打印的情况,下面,驱动人生为大家带来理光打印机连接后不打印的解决方案. 驱动人生分析,一般遇到理光打印机连接后不打印的情况, ...

  6. 电脑Hosts文件修改后无法保存的原因及解决方法教程

    Hosts文件是系统中的重要文件,它能屏蔽网站.帮助计算机加速域名解析.方便用户使用等,具有很多实用功能.最近有许多用户们人在向小编咨询过Hosts文件的保存问题,在Hosts文件修改之后,发现无法保 ...

  7. jdbc显示mysql的数据_JDBC链接mysql插入数据后显示问号的原因及解决办法

    1.在cmd中进入mysql查看默认的编码格式: mysql> show variables like "%char%"; 若不是utf8(因为我用的是utf8),关掉mys ...

  8. 安装ssd后不识别网卡_翻车了?安装固态硬盘后不识别的原因和解决方法

    怀着激动的心情将刚刚到手的固态硬盘装进电脑,结果开机后却找不到新装的硬盘?翻车怎会如此快?其实很多固态硬盘不识别.不认盘都是假故障.快速引导菜单不认盘?我的电脑中没盘符?存储极客就以东芝RC100 N ...

  9. 【笔记】损失函数计算后返回 nan 的原因以及解决办法:logX,X为负数或0将会计算得到nan,规定X范围,可以避免nan的出现

     https://www.jianshu.com/p/ffd3e63f39ef

最新文章

  1. document.getElementById()和document.forms[0].submit()
  2. 设计模式:常见模式案例
  3. Android跨进程通信二——AIDL
  4. pdo mysql fetchall_pdo fetch,pdo fetchAll,pdo query,pdo prepare用法举例
  5. 堆以及stl堆的使用
  6. Cassandra Java堆外内存排查经历全记录
  7. U3D的有限状态机系统
  8. 天律的云端大数据分析挖掘之旅
  9. java并行调度_java并行调度框架封装及示例
  10. makefile obj文件路径_makefile中包含的文件的路径
  11. C++新标准——C++1x
  12. 软考和华为证书的含金量,哪个更适合找工作
  13. 基于神经网络的房价预测,房价预测 神经网络
  14. Git命令提交项目代码
  15. 跟老男孩学 Linux 运维:Web 集群实战
  16. ARP协议和NDP协议分析
  17. 计算机中的正数,负数到底是什么?
  18. mysql 出现撇号 _Navicat使用教程:如何在MySQL中定位和删除有重复意义的值
  19. 腾讯云轻量应用服务器月流量包用完超额了怎么计费?
  20. js 转化为实体符_js字符实体 转义字符串

热门文章

  1. 爱普生Epson LQ-680K 打印机驱动
  2. 2022年全球与中国环己胺市场现状及未来发展趋势
  3. java中英文汉语混合排序_Java编程实现中英混合字符串数组按首字母排序的方法...
  4. 触控板用不了,解决办法:
  5. 中国地图的shp文件获取,包含省级
  6. 武汉意向岗位(一)——中国建设银行数据运营中心
  7. 3、(三)外汇学习基础篇之银行间外汇即期交易
  8. java 取当天0点_java 获取当天(今日)零点零分零秒
  9. 最新出炉的阿里巴巴面试题及答案汇总(513页)
  10. leetcode题解(含解题思路)(持续更新中)