Зная заранее, в какое ведро пойдет улей - PullRequest
0 голосов
/ 05 октября 2019

Когда в определенном столбце определено группирование, hive вычисляет значение хеш-функции для каждого уникального значения для столбца и отправляет строки в эти сегменты. Это может привести к перекосу сегментов, когда значения хеш-функции для нескольких уникальных значений приводят их к одному и тому же сегменту. Теперь предположим, что столбец с буклетами - это страна, и значения имеют вид: -

country = {'USA','Brazil','Findland','India','England'}

Теперь нет никакой гарантии, что хеширование отправит все 5 стран в разные сегменты (предположим, что количество блоков равно 5). Можно ли заранее узнать, в какой сегмент будет отправлена ​​строка с определенным значением для страны? Я ищу что-то вроде этого: -

select know_which_bucket(country,5) from table;

Это не обязательно должна быть функция улья, я просто пытаюсь логически объяснить, что я ищу, мне просто нужна информация. По сути, я укажу набор значений, количество сегментов и хочу узнать, к какому сегменту будет добавлено каждое значение. Если кто-то может предоставить для этого указатель Java, это тоже поможет. Кроме того, я не обязательно ищу программный способ, подойдет даже онлайн-калькулятор.

1 Ответ

0 голосов
/ 20 октября 2019

Я понял, вот как вы это делаете: -

Например, чтобы узнать, какой сегмент (файл) "США" отправится, при условии, что количество блоков равно 5: -

select pmod(hash('USA'),5);

Возвращает 3, поэтому он будет сохранен в файле 00000 3 _0. Таким образом, мы можем знать для любого входного значения и для любого количества сегментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...