Проблема полного сканирования таблицы Hive (используются разделенные столбцы)
У меня есть БОЛЬШАЯ таблица в Hive 0.13 - в ней примерно 250 ГБ данных в день. В час это, следовательно, около 10 ГБ данных. У меня есть инструмент BI, который хотел бы получать доступ к данным этой таблицы за день или за час, для чего мне нужно протестировать запросы, которые инструмент BI будет генерировать и запускать в Hive.
Один из запросов, когда BI используется для ежедневных данных за вчерашний день, выглядит следующим образом:
select count(*)
from my_table
where
yyyy=year(date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())),1))
and mm=month(date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())),1))
and dd=day(date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())),1))
;
Моя таблица в Hive в MY_TABLE, а YYYY, MM и DD - это разделенные столбцы в MY_TABLE. Он уже хранится в формате ORC.
Вышеупомянутый запрос выполняется в течение очень хорошего времени, после чего, когда я вижу вывод EXPLAIN EXTENDED, я ясно вижу, что он выполняет FULL TABLE SCAN MY_TABLE независимо от условий фильтрации.
Как мы можем избежать этой проблемы?
Добрый совет.
Обратите внимание: версия Hive - 0.13. Мы находимся в середине обновления.
Спасибо,
Suddhasatwa
Замечания:
Представленное здесь решение ( почему исключение разделов не происходит для этого запроса?) Не применимо в моем случае, так как я использую Hive 0.13, в то время как функция CURRENT_DATE доступна только после версии Hive 1.+.