Hive Bucketing: количество отдельных значений столбца больше, чем Number of bucketing number - PullRequest
0 голосов
/ 23 января 2020

В улье, скажем, у меня есть сотрудник таблицы с 1000 записями, и я собираюсь с колонкой темы. Общее количество различных значений столбца темы равно 20, но общее количество блоков равно 6. Как происходит перемешивание?

При понимании распределения я обнаружил две вещи: 1) Ведро сгруппирует все одно и то же значение и 2-й: Bucket сгруппирует данные на основе функции Ha sh. Для вышеприведенного сценария HIVE использует какой метод (1-й или 2-й) для перетасовки данных? Помоги мне понять.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Hive создает сегменты на основе значений, выбранных пользователем при создании таблицы. И куст хранит данные внутри каждого сегмента на основе значения столбца ha sh, которое вы можете представить как

hash_function (bucketing_col_value) mod num_buckets

, поэтому в вашем в этом случае это будет что-то вроде

bucketing_col_value mod num_buckets

, исходя из того, что все записи с одинаковым значением ha sh будут go в одном разделе. Допустим, ваши столбцы-темы имеют 20 различных значений от 1 до 20. Итак,

1 mod 6 = 1 = will go in 1st bucket
2 mod 6 = 2 = will go in 2nd bucket
3 mod 6 = 3 = will go in 3rd bucket
4 mod 6 = 4 = will go in 4th bucket
5 mod 6 = 5 = will go in 5th bucket
6 mod 6 = 6 = will go in 6th bucket
7 mod 6 = 1 = will go in 1st bucket
8 mod 6 = 2 = will go in 2nd bucket
.
.
.
So on..

, поэтому в соответствии с вашим вопросом оба случая выполняются в случае с разбивкой

1st: Bucket будет сгруппирован все одинаковое значение

Да, поскольку данные с одинаковым значением будут иметь одинаковое значение ha sh, что означает, что они будут go в одних и тех же сегментах

2nd: Bucket будет сгруппируйте данные на основе функции Ha sh

, как я показал ранее, сегменты данных будут делиться на основе значения данных ha sh.

, если вы заметили на этапе загрузки данных в вашем запросе количество редукторов такое же, как количество сегментов в целевой таблице.

Надеюсь, теперь вы все ясно

0 голосов
/ 23 января 2020

Во время группирования Значения групп кустов основаны на функции Ha sh. Также эмпирическое правило должно иметь степень двойки как количество ведер. Если вы примените это правило ко всем вашим таблицам, вы сможете оптимизировать объединения по столбцам сегментов.

Если вы хотите сгруппировать только одинаковые значения, вы должны использовать разбиение по столбцу. В этом случае у вас будет количество каталогов, равное количеству различных значений, и только одно значение на каталог.

...