分享

此种海量数据统计如何用HIVE实现?

本帖最后由 尘世随缘 于 2015-4-5 13:49 编辑


统计需求如下:
1、按用户统计给定时间范围内的每种optype操作记录总数
2、按单位统计给定时间范围内的每种optype操作记录总数

重新编辑下:



目前执行的过程如下:
查询Select * from user_Info where status=0 or status=2的结果放入一个队列,userList
然后循环队列
For(UserInfo userinfo:userList){
  Int c1=select count(1) from op_log where Optype=0 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
  Int c2=select count(1) from op_log where Optype=1 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;

  Int c3=select count(1) from op_log where Optype=2 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
;
  Int c4=select count(1) from op_log where Optype=4 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
;
}
然后统计结果插入数据库user_op_cout
现在打算把数据通过hive查询,请问hive这种操作需要如何写SQL/

已有(10)人评论

跳转到指定楼层
尘世随缘 发表于 2015-4-5 13:47:08
统计需求如下:
1、按用户统计给定时间范围内的每种optype操作记录总数
2、按单位统计给定时间范围内的每种optype操作记录总数

重新编辑下:
b1.jpg
b2.jpg

目前执行的过程如下:
查询Select * from user_Info where status=0 or status=2的结果放入一个队列,userList
然后循环队列
For(UserInfo userinfo:userList){
  Int c1=select count(1) from op_log where Optype=0 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
  Int c2=select count(1) from op_log where Optype=1 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
  Int c3=select count(1) from op_log where Optype=2 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
;
  Int c4=select count(1) from op_log where Optype=4 and userid=userinfo.getUserID() and  Optime》时间 and  Optime<时间;
;
}
然后统计结果插入数据库user_op_cout
现在打算把数据通过hive查询,请问hive这种操作需要如何写SQL/

回复

使用道具 举报

arsenduan 发表于 2015-4-5 14:28:37
hive跟其它sql语法大同小异。
使用union可以把这些结果组合起来

UNION ALL
&#8226;用来合并多个select的查询结果,需要保证select中字段须一致

&#8226;select_statement UNION ALL select_statement UNION ALL select_statement ...

回复

使用道具 举报

尘世随缘 发表于 2015-4-5 14:34:09
如果这样查询的话,感觉hive就没什么意义了。如果用group by 之类的,应该怎么用。
回复

使用道具 举报

arsenduan 发表于 2015-4-5 14:45:06
本帖最后由 arsenduan 于 2015-4-5 14:47 编辑
尘世随缘 发表于 2015-4-5 14:34
如果这样查询的话,感觉hive就没什么意义了。如果用group by 之类的,应该怎么用。

hive 有group by,可以多了解下hive的语法。下面是语法格式:

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list [HAVING condition]]
[   CLUSTER BY col_list
  | [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]

只要知道的语法,无论是union,还是group by,还是其它,都可以使用,看楼主想用什么方法使用

Hadoop Hive sql语法详解1-认识hive及DDL操作

Hadoop Hive sql语法详解2-修改表结构


Hadoop Hive sql语法详解3--DML 操作:元数据存储

Hadoop Hive sql语法详解4--DQL 操作:数据查询SQL

Hadoop Hive sql语法详解5--HiveQL与SQL区别



回复

使用道具 举报

尘世随缘 发表于 2015-4-5 14:54:12
谢谢,关键是我对这些SQL不熟悉,希望能给点建议。最好能按照此需求写个例子。谢谢!!!
现在的想法是:
select count(1),userid from op_log where opData>时间 and opData<时间  group by userid,opType
回复

使用道具 举报

ainubis 发表于 2015-4-5 16:35:16
回复

使用道具 举报

bioger_hit 发表于 2015-4-5 17:54:32
尘世随缘 发表于 2015-4-5 14:54
谢谢,关键是我对这些SQL不熟悉,希望能给点建议。最好能按照此需求写个例子。谢谢!!!
现在的想法是:
...
  1. select ao from  
  2. (select count(a.Optype) ao,a.Optype type from op_log a join user_info u on(a.Userid=u.Userid and a.opData>时间 and a.opData<时间))
  3. T GROUP BY T.type
复制代码

试试上面的,记得把放到一行

回复

使用道具 举报

尘世随缘 发表于 2015-4-5 20:25:36
我希望得到的结果是:

userid  optype typeCount
1         2          34
1         3          56
23       1          10
23       2          25
25      4          40

请问这样的结果SQL如何写?      
回复

使用道具 举报

尘世随缘 发表于 2015-4-5 20:37:58
select count(userid) as typecount,userid,optype from op_log group where opData>时间 and opData<时间  by userid,optype  
这样的写法是否可行呢?或则是否还有其他号的办法?
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条