首页 > 其他 > 详细

HIVE:用外连接替代子查询

时间:2014-05-09 08:34:53      阅读:544      评论:0      收藏:0      [点我收藏+]

由于hive也支持sql,很多人会把hql跟标准sql进行比较,甚至有的时候会直接套用。hive不支持事务也不支持索引,更不支持追加写,但是对于一般的sql都是能够支持的。但是对于一些子查询确实无法支持的,例如

1
select * from t_ext_1_bkdoubledelete where f1=(select max(f1) from t_ext_1_bkdoubledelete)

  这个sql在mysql中是能够支持的,意思是找到val最大的那一行记录,然后在hive中运行确实报错的;替代的是用左外连接:

1
select * from (select max(f1) as maxf1 from t_ext_1_bkdoubledelete) t1  left outer join (select * from t_ext_1_bkdoubledelete) t2 on t1.maxf1=t2.f1

  在上面的外连接中,先生成一个临时表t1获取其中最大的值max(f1),然后以max(f1)为左值,通过对自己的连接获取到相关的行;从而获取到最大行;

 

      下面的这个例子更有意义,使用外连接获取到用户的浏览记录。用户访问apapche后留下一条访问记录,对apache log的一个数据分析,现在hive里有一个表,一个字段是url,就是请求的网页的url,然后一个字段是time,按时间排序,想要得到所有的在访问百度之后访问的url,就比如说我访问了www.baidu.com,然后我访问了淘宝,那么www.taobao.com就是结果中的一条数据。

       

1
select t1.time1,t1.fromurl,t2.tourl from <br>(select time time1,url fromurl,userid from urlLog) t1 <br>left  outer join <br>urlLog t2 <br>on t1.userid=t2.userid <br>where t1.time1<t2.time and fromurl="www.baidu.com"

  

更加蛋疼的例子,可以看这个:

http://bbs.csdn.net/topics/390414342

 

HIVE:用外连接替代子查询,布布扣,bubuko.com

HIVE:用外连接替代子查询

原文:http://www.cnblogs.com/laodageblog/p/3717646.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!