在1亿条数据中执行一条简单的语句,查询只访问主站一次的用户数量:
select count(*) as cnt from tracklog group by cookieid having cnt=1 ;
查询反应很慢,半小时都未出结果
使用嵌套子查询优化hive-SQL
select count(t.cookieid) from (select count(cookieid) as cnt,cookieid from tracklog group by cookieid having cnt=1 ) t;
执行效率明显提高,同时Spark-SQL也完美支持这种子查询
1) 求总行数(count) :
hive
(default)> select count(*) cnt from emp; ---cnt 是总行数的别名
2) 求工资的最大值 :
hive
(default)>...
select user_no,score from table_awhere pday=(select max(pday) from table_a)
上述方式为
子查询
,会扫描所有分区执行非常缓慢,经查询发现,join管理会更快,如下:
select
user_no
,score
from (select max(pday) pday from table_a where pday&g.
在工作中,常用到left join来关联其他
hive
表进行查询,并且每个表都有相应的where条件。
在数据量大的情况下,不同连接条件所在的位置对查询效率的影响还是很大的。下面举一些例子:
现在有三个表,它们分别是:
表一:user_info
字段名 类型 备注
imei bigint
type string
date string 分区列
Hive
只支持在FROM子句中
使用
子查询
,
子查询
必须有名字,并且列必须唯一:
select * from (select id,devid,job_time from tb_in_base) a;
参考文档:
http://blog.csdn.net/shenxiaoming77/article/details/49490669
CREATE EXTERNAL TABLE `test.test_imp06`(
`exps` array<struct<id:string,l:string>> COMMENT ‘cesh...