hive查询结果排序

108 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

上几篇文章讲了一些连表查询的方法,用到的关键字都包含了join,那么如果只是用到join这个关键词的话,是什么作用呢。这里涉及到了一个名词:笛卡尔积。

使用join进行连表查询的话,就是将左边表的行数和右边表的行数进行相乘,获得的结果就是输出表的大小了。会对数据有一个倍增的效果。使用方法也是和之前差不多的。

select a.name,b.grade from table_A a join table_B b;

大家有注意到这里可以不需要加on这个条件,因为是将数据完全的相乘,每条数据成倍增长,不需要过滤条件。

然后就是多表连接,使用到join语句,展现的效果就是将多张表依次按照笛卡尔积获得结果,首先将第一和第二张表进行笛卡尔积的相乘,获得的结果再跟第三张表进行笛卡尔积的相乘,如此依次往后相乘,最后获得最终的结果集。

select a.name,b.grade,c.city from student a join table_B b on a.id=b.id join table_C c on a.id=c.id

介绍另外的查询方式,如何实现对结果集的排序,这里会用到order by和sort by这两个方法。

使用order by的时候,可以是升序排列也可以实现降序排列,还可以将两者结合起来,分别按照不同的字段既有升序也有降序。

按照哪个字段在前就优先按照该字段的排序规则进行排序,再根据后面字段的排序规则分别排序,获得最终的结果。

如果表格中的数据较多,则可以加上limit限制一下查询的条数,以此提高效率。

下面通过具体的实例来展现一下order by的作用。

select id, name,age,grade from student_table_col where deleted=0 order by grade asc ,grade desc limit 200;

首先按照age这个字段进行升序,再在age相同时按照grade降序,对查询到的全部数据进行排序。