文章目录
前段时间,因为项目原因,了解了cluster by,顺路写了一篇博客: HIVE中,cluster by有什么意义。然后底下有人回复:
假如100个专业分了10个区,那么每一个区里都应该会有不同的专业。但反过来说,真正的mr 并没有完全按专业分区,如果完全的话那应该是100个区。问题是结果只有10个区,这么做意义的结果总结一下应该是:cluster by 的字段只是参考分区字段,而非严格的按此字段分区。是不是这样?求回复评价。
本想在评论下面回复,但是越写越乱,所以又写了一篇博客。
首先,先说明一个误区,不要用cluster by 和 group by
去作比较,要做比较也应该是和order by作比较。cluster by的分区 和 group by 的分区完全是两码事。
为什么会出现cluster by?
cluster by是hive中的,mysql等数据库中是没有的,为什么hive会出现cluster by呢?
order by
当需要对数据排序时,我们可以使用order by。但使用order by意味着对所有数据进行排序,即:无论有多少个map,无论有多少数据量,都只用一个reduce。这会消耗极大的时间,且数据量大时,对资源消耗也极为巨大。<