Я работаю с таблицей Hive, которая разделена по годам, месяцам и дням. Например,

.

год=2015 И месяц=201512 И день = 20151231.

Согласно моим ограниченным знаниям о том, как работает Hive, они, вероятно, установлены в структуре папок, где папка '2015' содержит 12 папок с месяцами, а каждая папка с месяцами содержит папки с 28-31 днями внутри. В таком случае, используя

ГДЕ год = 2015 И месяц = 201512 И день = 20151231

просто спустится вниз по структуре каталогов до папки 20151231. Я бы подумал, что использование просто WHERE day = 20151231 вызовет тот же обход и, следовательно, будет по сути тем же запросом, но нам был предоставлен пример кода, который использовал формат year AND month AND day (то есть ссылался на все 3 раздела).

Я выполнил несколько эталонных тестов, используя оба варианта (вчера вечером и сегодня утром, когда нагрузка на сервер крайне мала или вообще отсутствует), и затраченное время практически одинаково. Я подозреваю, что код примера неверен, и я могу просто использовать дневной раздел, но я хочу быть уверенным.

Есть ли преимущество в производительности при использовании нескольких разделов, которые являются подмножествами друг друга, в запросе Hive?

.

Я знаю, что разделы в Hive рассматриваются как столбцы, но будет ли то же самое справедливо для столбцов без разделов?

Ответы (1)

Когда вы выполняете подобный запрос на таблице с разделами, hive сначала запросит метахранилище, чтобы найти, какие каталоги должны быть включены в map/reduce input, и, как вы видели, не имеет значения, как они расположены (day=20151231 против year=2015/month=12/day=31). Если вы используете mysql для метахранилища, это означает, что hive внутренне выполнит sql-запрос к своей базе данных, чтобы получить только разделы для запроса. Разница в производительности этого SQL-запроса также будет незначительной, особенно по сравнению с продолжительностью работы map/reduce. Совсем другое дело, когда используются столбцы, не относящиеся к разделам, поскольку они не хранятся в метахранилище, а требуется полное сканирование данных.

2022 WebDevInsider