HIVE调优之去重统计
SELECT COUNT( DISTINCT id ) FROM TABLE_NAME WHERE ...;
对一个表中符合条件的记录统计不重复的id的总数。由于引入了DISTINCT,因此在Map阶段无法利用combine对输出结果消重,必须将id作为Key输出,在Reduce阶段再对来自于不同Map Task、相同Key的结果进行消重,计入最终统计值。作业运行时的Reduce Task个数为1,对于统计大数据量时,这会导致最终Map的全部输出到单个ReduceTask处理。这唯一的Reduce Task需要Shuffle大量的数据,并且进行排序聚合等处理,这使得它成为整个作业的IO和运算瓶颈
改进:
SELECT COUNT(*) FROM (SELECT DISTINCT id FROM TABLE_NAME WHERE … ) t;