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.Используйте искомое предложение.
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;