持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情
接着上一文继续介绍hive中的排序,本文继续介绍一些排序方法以及条件查询的方法。
上一篇的排序方法中介绍了order by的使用方法和具体逻辑,另外还有一种排序函数是sort by。解释一下sort by的实现逻辑:
SORT BY
语句会在hive中的每个Reduce中对数据进行排序,这里是第一层排序保证,可以保证每个Reduce输出的数据是有序的(但是在全局中就不一定有序),但又是它可以提高全局排序的性能。DISTRIBUTE
语句结合SORT BY
语句可以实现在第一列数据相同时,能够按照第二列数据进行排序。
此外还有一种排序distribute by,他和sort by不同的是通过建立map中的新排序,可以将map分发到不同的reduce节点上,这就可以和sort by组合在一起实现全局化的排序。所以可以将distribute by作为前置排序,后置使用到sort by进行聚焦汇总排序,提高排序查询效率。
select name,id,student_age from student_table_test distribute by age sort by age;
select name,id,student_age from student_table_test cluster by age;
在这种双重排序的加工下,可以对数据进行高效全量的一个排序,因为这种方式应用的比较广泛,所以还出了一个cluster by的写法,就是当distribute by和sort by指定的列相同的时候,可以直接使用cluster by,即上面两种写法的结果是一样的。
在查询中还可以转换类型,使用到cast的方法。具体使用方式为cast(value As TYPE)。具体例子来写一个。
select name,id,sex from student_table where cast(stuId as int) >10000; -- 首先将stuId转换为int类型,然后再按照stuId过滤查询数据。
归纳总结一下在hive中应用到的排序的方式有order by,sort by ,distribute by以及cluster by,具体问题具体分析,具体案例该用哪一种还是要根据实际情况去区分。