利用HIVE的窗口函数进行SQL查询中出现的问题记录

student_info部分数据

 

score_info部分数据

 

course_info

1、问题复现

--完整SQL
selectsti.stu_id,sti.stu_name,concat_ws(",",collect_set(ci.course_name)) over(partition by sti.stu_id)
fromstudent_info sti
left joinscore_info sci
onsti.stu_id=sci.stu_id
left joincourse_info ci
onsci.course_id=ci.course_id
limit 13

2、错误分析

        在Hive的SELECT子句中使用窗口函数时,需要确保窗口规范(OVER子句)中的所有非聚合列都出现在GROUP BY子句中。因为Hive需要能够确定如何对数据进行分组以应用窗口函数。

在提供的查询中,使用了collect_list函数来收集每个学生的课程名称,并希望使用窗口函数来实现分区。然而,由于ci.course_name没有出现在GROUP BY子句中,Hive无法确定如何对数据进行分组。

3、解决措施

为了解决这个问题,我在这里尝试修改查询,将ci.course_name包含在GROUP BY子句中。再次运行还是报错,于是查询了这个collect_list函数,由于collect_list函数本身就是根据sti.stu_idci.course_name进行分组的,所以实际上我们不需要在GROUP BY子句中重复这些列,所以最后修改为下面的SQL后运行成功:

SELECTsti.stu_id,sti.stu_name,concat_ws(",", collect_list(ci.course_name)) AS stu_courses_sum
FROMstudent_info sti
LEFT JOINscore_info sci
ONsti.stu_id = sci.stu_id
LEFT JOINcourse_info ci
ONsci.course_id = ci.course_id
GROUP BYsti.stu_id, sti.stu_name
LIMIT 13;

4、思考

        在此查询中分别测试了大小表顺序不同的join,发现大表在前也不一定查询效率低,这次查询时大表在前查询速度比在后要快一些。我分析原因可能时on后的过滤条件起到了作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578572.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以XX医院为例的医疗建筑能效管理系统【建筑能耗 供电可靠 】

一、行业背景 二、行业特点 1.供电可靠性要求高:医院配电系统复杂,门诊、急救、手术室、ICU/CCU、血液透析等场合特一级和一级负荷比较多,一旦发生故障会造成严重影响,对配电可靠性要求极高。 2.能耗水平高:医院能耗…

超卖问题的 4 种解决方案来了,太硬核了

大家好,我是路人,最近刚推出的《Java 高并发 & 微服务 & 性能调优实战案例 100 讲》,此课程目前已发布上线,正在连载中,文末有观看方法。 所有案例均源于个人工作实战,均提供原理讲解 & 亲手敲…

ssm 科研奖励申报管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 科研奖励申报管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用…

基于SSM的百货中心供应链管理系统设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套百货中心供应链管理系统有管理…

【OpenBayes 官方教程】在模型训练中使用子域名访问服务

本教程主要为大家讲解 OpenBayes 上如何在模型训练中使用子域名访问服务,新朋友点击下方链接注册后,即可获得 4 小时 RTX 4090 5 小时 CPU 的免费使用时长哦! 注册链接 https://openbayes.com/console/signup?ryuudi_nBBThttps://openbay…

Unity 刮刮乐(优化极简)

废话不多说上代码,上图片,欢迎对Unity有兴趣的伙伴和我一起探讨学习 using UnityEngine; using UnityEngine.UI;public class ScratchCardWithSpriteRenderer : MonoBehaviour {// 公开背景和遮罩的Sprite Renderer组件public SpriteRenderer background…

谷歌seo怎么优化运营?

那些太大众的内容就不说了,在这里说一个后期谷歌seo可以去优化的一个方向,那就是电子邮件营销,这是一个间接营销seo的方案,电子邮件营销本身不会直接改变你在搜索结果中的排名,但它是一种强有力的工具,可以…

以syslog形式推送告警信息到UMP平台--主要为接口思路

背景 客户需求,根据当前时间获取到的接口返回值中的关键字段的数值进行判断,当超过阈值时推送可恢复告警,推送一次即可,待数据正常时推送告警恢复,工作日8点到18点执行。【代码还在整理中】 问题分析 告警通知&…

蓝桥杯算法题练习

1、20世纪有多少个星期一 (1901、1、1——2000、12、31) 方法一:python代码 方法二:excel工具(设置单元格格式,把日期换成周几的形式) 2、100个数相乘,结果有几个0 3、切面条 找规律:对折次数n 弯2^n-1 面…

刷题之动态规划

前言 大家好,我是jiantaoyab,开始刷动态规划的题目了,要特别注意初始化的时候给什么值。 动态规划5个步骤 状态表示 :dp数组中每一个下标对应值的含义是什么->dp[i]表示什么状态转移方程: dp[i] 等于什么1 和 2 是…

mysql之MyBatis核心工作原理

MyBatis核心工作原理 一、源码环境 1.手动编译源码 工欲善其事必先利其器。为了方便我们在看源码的过程中能够方便的添加注释,我们可以自己来从官网下载源码编译生成对应的Jar包,然后上传到本地maven仓库,再引用这个Jar。大家可以自行去官…

读所罗门的密码笔记05_新的力量平衡

1. 技术发展 1.1. 美国和中国俨然成为人工智能研究、开发和部署方面无可争议的领导者 1.2. 人类从未彻底阻止某种技术的发展,虽然不同国家在不同时间对克隆、化学武器和核武器等技术采取了暂停或禁止措施,但我们仍在继续推进最前…