都是用来去重的,去重的,group by 主要是用来分组的;distict专门用来去重的。
结论:能使用group by代替distinct就不要使用distict;
原因:使用distinct(id)会将所有的id都shuffle到一个reduce里面,数据倾斜,
group by 起来多个reducer,将数据分布到多态机器上执行,时间就非常快。
由于没有手动的指定reduce的个数,Hive会根据数据的大小动态的指定Reduce大小,也可手动指定
如果想在一条语句中考一条语句里看总记录条数以及去重之后的记录条数,那没有办法过滤,所以你有两个选择,要么使用两个sql语句分别跑,然后union all或者就使用普通的distinct。具体来说得看具体情况,直接使用distinct可读性好,数据量如果不大