hive中group by 提示Expression Not In Group By Key的解决办法
hive中group by的时候
select col_1,col_2 from table_name group by col_1;
会提示:
FAILED: SemanticException [Error 10025]: Line 1:12 Expression not in GROUP BY key ‘col_2’
这里网上查了下,有两种解决方法:
1、不关心col_2的值,且有多个col_2,那么语句改成
select col_1, collect_set( col_2 )[0] from table_name group by col_1;
2、如果每个col_2的值不同且关心col_2的值,那么可以改成
select col_1,col_2 from table_name group by col_1,col_2;
##########################################
group by 操作:
1,Map端聚合:Map端进行部分聚合
hive.map.aggr用于设定是否在Map端进行聚合,默认hive.map.aggr=true,version:0.10.0
另外,hive.groupby.mapaggr.checkinterval=100000用于设定Map端进行聚合的操作条目
2,数据倾斜:
hive.groupby.skewdata设定是否在数据分布不均衡,即发生倾斜时进行负载均衡,当选项为hive.groupby.skewdata=true时,生成的查询计划会有两个MapReduce,在第一个MapReduce中,Map的输出结果会随机地分不到Reduce中,对Reduce做部分聚合操作并输出结果,是相同的Group by key有可能分发到
不同的reduce中,从而达到负载均衡的目的,第二个MapReduce任务在根据预处理的数据按照Group by key分不到Reduce中(保证Group by key 分布同一个Reduce),最后完成最终的聚合操作
|
|