持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
本文开始介绍我的hive实战经验,毕竟学以致用,学了那么多的hive函数,也只为了完成实际的数据需求做铺垫的,大大小小的案例也是做了不少,先从一个比较复杂的案例开始介绍吧,这个数据开发如果从难的开始讲有个好处就是,复杂的需求的sql写法基本可以将简单的需求全部覆盖,并且写法和代码也较多,涉及面更广泛。
在hive的设计中是可以嵌入java函数的,针对一些复杂的计算逻辑,或者是复杂的数据处理,用hsql不足以实现功能的时候,就可以引入java函数。
实例:一年级到六年级中,都会有语文、数学、英语三门课程,其次在一年级到三年级有体育、音乐、劳动,在四年级到六年级有化学、物理、生物。此时要统计每位学生的综合成绩,一年级到六年级中,语文、数学、英语的分数占比是有所不同的,并且同一年级中针对不同的班级占比也不同,现在要计算每位学生期末考试的综合成绩,如何获得呢?
此时用到java函数先计算出不同年级和不同班级,综合成绩实际占比是多少,然后套用到每个学生身上。
在java函数设计中,输入参数为年级号和班级号,设置每一门课程的占比默认值,通过判断语句分别对不同年级和班级进行占比计算,输出新的每一门的占比值,将结果返回出来,可知此时返回的结果应该是个list。
然后在sql语句设计中,引入该函数的方法名称,对每一位学生输出一个list,解析list获得每一门课程的占比,可以在list中规定每一门学科的占比顺序,以及不需要的课程占比就为0即可。
最后输出学生的综合成绩列即可。