语句级别优化
--列、分区裁剪
查询过程中减少不必要的分区和列的查询。
--NULL处理
-如无需对应字段可以在语句中直接过滤;
-如需要可以提前筛选出来Union all关联输出,或者赋予新值(测试结果显示更优于前者)。
--不同类型字段关联
会导致按照数据类型分配Reducer,导致数据倾斜,此处需要转化为同一类型。
--Join操作
-大&小表:小表在左(会被先加载),大表在右。新版Hive已经处理了这个问题,会自动优化。
-大&大表:减少查询量,如仅查询增量
-map join:当一个表比较小时,可以开始此功能,将join从reducer提前到Map阶段。Join操作在Map阶段完成,不再需要Reduce,所以Map Task的个数就等于结果文件数。
//开启MapJoin功能
set hive.auto.convert.join = true;
--谓词下推
//默认开启
set hive.optimize.ppd = true;
-注意:如果使用外连接,则谓词下推会失效
--group by操作
默认情况下,完成Map阶段后,同一key值会发送到同一reducer,此时一个key值过大的就会产生数据倾斜。针对这种情况有一下两种方式:
方法一&