分享

简单的sql,group by 的结果不是想的那样啊

wangzhenqiang 发表于 2015-8-17 19:07:43 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 14607
select  uid,state,sum(quantity)  pro_quantity,count(distinct order_id) order_cnt from  sta_order where uid ='32939970140' group by uid,state
这条SQL执行结果是:
32939970140     NO_PENDING_ACTION       14      13
32939970140     REMOVED                          35      3
然后再把上面SQL作为一个结果集,在之上求MAX
select
  T.uid
  ,max(T.pro_quantity)  max_prod_cnt
from
(
select  uid,state,sum(quantity)  pro_quantity,count(distinct order_id) order_cnt from  sta_order where uid ='32939970140' group by uid,state
) T
group by T.uid结果是:
32939970140     14
32939970140     35
为什么 不是
32939970140     35

我在设置set mapred.reduce.tasks=1;,再执行,就得到想要得结果,数据量大的话,我不可能用一个reduce吧,为什么,求解,高手帮个忙

已有(6)人评论

跳转到指定楼层
xuanxufeng 发表于 2015-8-18 03:56:40
本帖最后由 xuanxufeng 于 2015-8-18 03:58 编辑

跟group by T.uid有区别,说明他们两个不是一组,如果在同一组就会取出最大的了
回复

使用道具 举报

evababy 发表于 2015-8-18 09:31:23
不符合SQL标准,使用MAX时候无法获取 T.uid的,HIVE能执行出结果只能说……好强大,建议用标准SQL执行后比较分析
回复

使用道具 举报

wangzhenqiang 发表于 2015-8-18 09:52:37
xuanxufeng 发表于 2015-8-18 03:56
跟group by T.uid有区别,说明他们两个不是一组,如果在同一组就会取出最大的了

不明白呀,不是都是同一个key吗
回复

使用道具 举报

wangzhenqiang 发表于 2015-8-18 11:38:05
本帖最后由 wangzhenqiang 于 2015-8-18 12:03 编辑

设置参数set hive.groupby.skewindata=true 就可以了,但是速度慢了许多,简直疯了
回复

使用道具 举报

desehawk 发表于 2015-8-18 14:53:54
wangzhenqiang 发表于 2015-8-18 11:38
设置参数set hive.groupby.skewindata=true 就可以了,但是速度慢了许多,简直疯了

应该是数据倾斜造成的
回复

使用道具 举报

wangzhenqiang 发表于 2015-8-18 16:10:45
desehawk 发表于 2015-8-18 14:53
应该是数据倾斜造成的

上面的子查询查出的就2行数据,不可能倾斜吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条