order by
只有一个减速器,太慢了。我想找个快的方法。 sort by
在每个减速机中排序,那么我们如何获得全局排序?我是通过搜索引擎得到的:
select * from
(select title,cast(price as FLOAT) p from tablename
distribute by time
sort by p desc
limit 10 ) t
order by t.p desc
limit 10;
然后尝试验证它。
1.在我的配置单元表中获得正确答案。在名为tablename的表中有215666条记录。
SELECT title,cast(price as FLOAT) p
from tablename
WHERE dt='2020-03-08'
and price IS NOT NULL
ORDER BY p DESC
LIMIT 10
;
2.使用searched子句。
set hive.execution.engine=mr;
set mapred.reduce.tasks=5;
SELECT title,cast(price as FLOAT) p
from tablename
WHERE dt='2020-03-08'
and price IS NOT NULL
DISTRIBUTE BY title
SORT BY p desc
LIMIT 10
;
结果与正确答案相同!以下是我的问题:
1.为什么只回10行?有5个减速机,每个减速机返回10,应该是5*10=50?
2.如果应该返回10行,为什么结果是全局排序?这10行不是来自同一个减速机吗?限制是随机的,它不能在5个减速机中获得全局顺序。
3.如果应该返回10行,则搜索子句的外部是多余的?
select * from
(
) t
order by t.p desc
limit 10;
1条答案
按热度按时间dgiusagp1#
考虑使用
total order partitioner
,请参见https://cwiki.apache.org/confluence/display/hive/hbasebulkload#hbasebulkload-preparerangepartitioning了解详细信息(只需忽略hbase的部分)