Количество элементов улья в столбце максимального раздела

Я борюсь с запросом, который может показаться простым, но который доставляет мне много проблем.

SELECT COUNT(*) FROM mytable where partition_column IN (SELECT MAX(partition_column) FROM mytable )

mytable - это внешняя таблица 2To Hive, разделенная на разделы по столбцу partition_column. Выполнение этого запроса занимает 10 минут ..

Когда я делаю 2 отдельных запроса:

SELECT MAX(partition_column) FROM mytable
> 2020-06-29
SELECT COUNT(*) FROM mytable where partition_column = '2020-06-29'

Работает супер нормально и супер быстро.

Я что-то упускаю ? Спасибо

Я использую Hive 1.2.1 и Hadoop 2.7.3


person Eric C    schedule 30.06.2020    source источник


Ответы (1)


Похоже, обработка подзапроса занимает много времени. Поскольку вы выполняете фильтрацию по тому же столбцу и таблице, что и подзапрос, обработка шага редуктора занимает много времени. Следовательно, это приводит к медленному выполнению запроса.

Вы можете улучшить свой запрос, введя CTE, который создаст временный набор результатов. Что-то вроде ниже:

 WITH MY_CTE_SUBQUERY AS (
      SELECT MAX(partition_column) as max_pc FROM mytable
 )
 SELECT COUNT(*) 
 FROM mytable 
 where partition_column IN (Select max_pc from MY_CTE_SUBQUERY);

Подробнее об hive CTE в официальном документе.

person Rishu Shrivastava    schedule 30.06.2020
comment
Привет @Rishu, нет, сам подзапрос занимает 2 секунды, я пробовал с вашим запросом, он многое не изменил :( - person Eric C; 30.06.2020