【发布时间】:2014-08-28 10:01:08
【问题描述】:
我有一个查询,它需要按 colB 分组的 colA 计数,并具有特定的 COlC 平均值平均值。例如
SELECT COUNT( X.colA ), X.colB , X.MEASURE
FROM (
SELECT colA , colB , avg(colC) MEASURE
FROM tableA
GROUP BY colA, colB
HAVING round(avg(colC),2) > 0
) X
GROUP BY X.MEASURE , X.colB
HAVING X.MEASURE BETWEEN 0 AND 3000
ORDER BY MEASURE
示例结果可能是
No of User, URL , average time spent
90182 , abc.com, 334
293556 , def.com, 33
上述查询的问题在于,由于它有一个子查询,因此内部子查询将大量数据作为中间结果混洗到外部查询,这导致查询在大型数据集上变得非常慢。
有没有办法我们可以将上述查询转换为没有任何子查询的查询,或者是否有任何可用的 UDAF,因此没有更多的中间数据大洗牌并且它在单个阶段运行?
【问题讨论】:
标签: sql hadoop subquery hive query-optimization