Скажет, у нас есть таблица разбита на разделы как: -Является ли разделение кустов иерархическим по своей природе?
CREATE EXTERNAL TABLE MyTable (
col1 string,
col2 string,
col3 string
)
PARTITIONED BY(year INT, month INT, day INT, hour INT, combination_id BIGINT);
Теперь, очевидно, год будет хранить год значение (например, 2016 г.), месяц будет хранить месяц va.ue (например, 7) день будет хранить день (например, 18), а час будет хранить значение часа в 24-часовом формате (например, 13). Комбинация_id будет комбинацией проложенных (если однозначное значение имеет значение «0 слева») для всех этих значений. Таким образом, в данном случае, например, комбинация идентификатор 2016071813.
Так обстреливает запрос (позволяет называть его запрос по): -
select * from mytable where combination_id = 2016071813
Теперь улей не знает, что combination_id на самом деле сочетание год, месяц, день и час. Так будет ли этот запрос не использовать надлежащее преимущество разделения?
Другими словами, если у меня есть еще один запрос, назовем его Query B, будет ли это более оптимальным, чем запроса А или нет никакой разницы: -
select * from mytable where year=2016 and month=7 and day=18 and hour=13
Если улей схема разбиения действительно иерархическая по своей природе, то запрос B должен быть лучше с точки зрения производительности - это то, о чем я думаю. На самом деле, я хочу решить, нужно ли вообще избавиться от comb_id от схемы разбиения, если это вообще не способствует повышению производительности.
Единственное реальное преимущество для использования комбинации идентификатор, чтобы иметь возможность использовать МЕЖДУ оператор выбора: -
select * from mytable where combination_id between 2016071813 and 2016071823
Но если это не будет воспользоваться схемой разбиения, она собирается препятствовать выполнению.
Run 'объяснить выбор ....'для обоих запросов и проверить план выполнения. Это должно дать вам некоторые подсказки о том, как оптимизатор Hive выполняет «разделение разделов». –