相关文章推荐
豁达的钱包  ·  X-MOL·  1 年前    · 

在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)&gt... 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...