2015-11-04 3 views
2

Продолжаем от вопроса: What is the difference between partitioning and bucketing a table in Hive ?ульев ведра против Перегородки

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

Однако, вместо разбиения на разделы, если мы ведем одну и ту же таблицу на основе столбца зарплаты и устанавливаем числа фиксированных кодов. Тогда в этом случае, если мы напишем один и тот же запрос, я хотел бы знать, как этот запрос получит выгоду от ведер? Может кто-нибудь объяснить?

ответ

0

Одним из вариантов использования bucketing является быстрый выборка данных.

Представьте себе таблицу

CREATE TABLE employee(employeeId String, salary Double) 
CLUSTERED BY(user_id) INTO 10 BUCKETS; 

Мы bucketed не зарплаты, а по EmployeeID, таким образом, что каждый сотрудник помещается несколько случайно в ведро. Мы можем сказать, что статистически вероятно, что зарплаты распределяются довольно равномерно по всем ведрам.

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

Select Average(salary) FROM employee TABLESAMPLE(BUCKET 1 OUT OF 10 ON employeeId); 
0

Как сказано mattinbits, bucketing будет более полезен, если вы будете использовать идентификатор сотрудника, а не зарплату.

И количество ковшей может быть в силе 2. как 2,4,8,16,32 ...

Чтобы решить, сколько ведер, вы должны рассмотреть объем данных в один ковш = (общий размер данных/количество ковшей) < (должен быть меньше) размер вашей памяти.

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

Вы должны выбрать раздел, когда вы будете использовать много предложений where в том же столбце (секционированный столбец), хорошим кандидатом для секционированного столбца может быть: состояние, город, страна, год, месяц, отдел,

Смежные вопросы