Улей распространять по vs без распространения по

Это может звучать просто, но этот вопрос преследует меня некоторое время.

Допустим, у меня есть следующий запрос

SELECT s.ymd, s.symbol, s.price_close FROM stocks s
SORT BY s.symbol ASC;

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

SELECT s.ymd, s.symbol, s.price_close FROM stocks s
DISTRIBUTE BY s.symbol
SORT BY s.symbol ASC, s.ymd ASC;

Каков эффект, если я не укажу условие "распределить по"? Какой столбец ключа вывода карты по умолчанию выбран в первом запросе, то есть, по какому столбцу он распределен?

2 ответа

Решение

Я нашел ответ сам. При сортировке по ключ вывода из преобразователя не является столбцом, к которому применяется сортировка по. Ключом может быть смещение файла записи. Выходные данные редукторов сортируются по редуктору, но одна и та же сортировка по значению столбца может появляться в выходных данных более чем одного редуктора. Это означает, что выход редукторов перекрывается. Распределить по гарантирует, что данные будут распределены между редукторами на основе распределения по столбцам и, таким образом, гарантируя, что одно и то же значение столбца поступит в тот же редуктор и, следовательно, в один и тот же файл.

Подробности доступны. Я думаю, что это ответ, который вы ищете. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

Другие вопросы по тегам