hive中的group by字句,正则全中文字段

hive wiki文档:
http://www.cnblogs.com/ggjucheng/archive/2013/01/09/2853798.html

Select语句和group by字句

当使用group by字句,select语句,只能包含group by包含的列。当然,在select语句,可以有多个聚合函数(例如count)。看一下例子:

CREATE TABLE t1(a INTEGER, b INTGER);

一个关于上表的group by的查询,可以是这样:

复制代码
SELECT
   a,
   sum(b)
FROM
   t1
GROUP BY
   a;
复制代码

上面的查询可以工作,因为select字句包含a(group by表达式)和一个聚合函数(sum(b)).

但是,下面的查询无法工作:

复制代码
SELECT
   a,
   b
FROM
   t1
GROUP BY
   a;
复制代码

select语句有多余的列(b),它不包含在group by字句(而且它也不是聚合函数)。这是因为,如果表t1看起来像:

a    b
------
100  1
100  2
100  3

如果group的key是a,那么当group a=100时,b的值在hive中应该显示多少?一种说法,它应该是第一个值或最低值,但我们都同意,有多种可能的选项。hive摒弃了这种猜测无效的SQL(HQL,要准确):有一列在select子句中,却不包含在GROUP BY子句中。


(1)在mysql中select中出现group by中没有出现的列
则GROUP BY 在分组的时候,可能是一个一个来找的,发现有相等的,去掉,保留第一个发现的那一条记录。
但是hive摒弃了这种猜测无效的SQL。
(2) a.province rlike '^[\\u4e00-\\u9fa5]+$',正则全中文字段
USE default;
select c.province,count(c.cookie)
from
(select b.cookie,b.province
from
(select a.cookie, a.province
from default.ud_al_allbaidu_session_data a
where a.partition_stat_date=20130114
         and  a.province rlike '^[\\u4e00-\\u9fa5]+$'    
) b
group by b.cookie,b.province) c
group by c.province
;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值