Примеры запросов Hive: ORDER BY, GROUP BY и т. д. Cluster By
⚡ Умное резюме
В запросах Hive используются предложения ORDER BY, GROUP BY, SORT BY, CLUSTER BY и DISTRIBUTE BY для сортировки, группировки и распределения строк между редукторами, и каждое предложение демонстрируется здесь на примере одной таблицы сотрудников.
Hive предоставляет язык запросов типа SQL для целей ETL, работающий поверх... Hadoop файловая система.
Язык запросов Hive (HiveQL) предоставляет в Hive среду, аналогичную SQL, для работы с таблицами, базами данных и запросами.
В Hive используются различные типы операторов для выполнения различных видов обработки данных и запросов, а также обеспечивается подключение по JDBC для более эффективного взаимодействия с узлами за пределами среды.
Запросы Hive предоставляют следующие возможности:
- Моделирование данных, например, создание баз данных, таблиц и т. д.
- Функциональные возможности ETL, такие как, например,tracпреобразование, трансформация и загрузка данных в таблицы.
- Играя объединить разные таблицы данных
- Специальные пользовательские сценарии для упрощения написания кода.
- Инструмент более быстрого запроса на базе Hadoop
Создание таблицы в Hive
Прежде чем приступить к основной теме этого урока, мы сначала создадим таблицу, которая будет использоваться в качестве справочного материала для последующих разделов.
В этом уроке мы создадим таблицу «employees_guru» с 6 столбцами, как показано на скриншоте ниже.
Судя по приведенному выше снимку экрана,
- Мы создаём таблицу «employees_guru» с шестью столбцами, содержащими значения Id, Name, Age, Address, Salary, Department, которые относятся к сотрудникам организации «guru».
- На этом этапе мы загружаем данные в таблицу employees_guru. Данные, которые мы будем загружать, находятся в файле Employees.txt.
Упорядочить по запросу
Синтаксис оператора ORDER BY в HiveQL аналогичен синтаксису оператора ORDER BY в... SQL язык.
ORDER BY — это условие, которое мы используем с оператором “SELECT”. Запросы улья Для сортировки данных. Для сортировки значений столбцов, указанных с помощью оператора ORDER BY, используются столбцы таблиц Hive, а результаты запроса отображаются в порядке возрастания или убывания этих значений.
Если указанное поле ORDER BY является строкой, то результат отображается в лексикографическом порядке. На стороне сервера весь результирующий набор должен быть передан в один редуктор.
Этот единственный редуктор также делает операцию ORDER BY дорогостоящей при работе с большими таблицами, поэтому в строгом режиме (hive.mapred.mode=strictHive отклоняет ORDER BY, не содержащий пункта LIMIT.
На скриншоте ниже показан запрос ORDER BY и отсортированные по нему строки.
На приведенном выше скриншоте можно заметить следующее:
- Это запрос, выполненный к таблице «employees_guru» с использованием предложения ORDER BY и столбца «Department», определенного в качестве имени столбца ORDER BY. «Department» — это строка, поэтому результаты отображаются в лексикографическом порядке.
- Это фактический результат выполнения запроса. Результаты отображаются в порядке следования по столбцу «Отдел», например, «Администрация», «Финансы» и так далее.
Запрос:
SELECT * FROM employees_guru ORDER BY Department;
Группировать по запросу
В предложении GROUP BY используются столбцы таблиц Hive для группировки.ping Указанные значения столбца, заданные с помощью оператора GROUP BY, используются в запросе, который выбирает и отображает результаты, сгруппированные по этим значениям.
Например, на скриншоте ниже показано общее количество сотрудников, присутствующих в каждом отделе. Здесь в качестве значения для группировки используется «Отдел».
На приведенном выше скриншоте мы увидим следующее:
- Это запрос, выполняемый к таблице «employees_guru» с использованием предложения GROUP BY и столбца Department, определенного в качестве имени столбца GROUP BY.
- Здесь представлены название отдела и количество сотрудников в каждом отделе. Все сотрудники, принадлежащие к определенному отделу, сгруппированы и отображены, поэтому каждая строка результатов содержит название отдела и общее количество сотрудников в нем.
Запрос:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Сортировать по:
Оператор SORT BY выполняет сортировку результатов по именам столбцов таблиц Hive. Для сортировки в порядке убывания можно использовать DESC, а для сортировки в порядке возрастания — ASC.
Оператор SORT BY сортирует строки перед передачей их в редуктор, поэтому порядок гарантируется внутри каждого редуктора, а не по всему результату. Сортировка всегда зависит от типа столбца.
Например, если тип столбца числовой, сортировка происходит в числовом порядке, а если тип столбца строковый, сортировка происходит в лексикографическом порядке.
На скриншоте ниже показан запрос SORT BY с использованием DESC.
На приведенном выше снимке экрана мы можем наблюдать следующее:
- Это запрос, выполненный к таблице «employees_guru» с условием SORT BY и именем столбца, заданным в качестве SORT BY, «Id». Мы использовали ключевое слово DESC.
- Таким образом, отображаемый результат упорядочен по убыванию значения «Id».
Запрос:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Оператор CLUSTER BY используется в HiveQL в качестве альтернативы операторам DISTRIBUTE BY и SORT BY.
Предложение CLUSTER BY используется для таблиц, присутствующих в Hive. Hive использует столбцы из предложения CLUSTER BY для распределения строк между редукторами, и столбцы, указанные в предложении CLUSTER BY, распределяются между несколькими редукторами. Оно также обеспечивает порядок сортировки значений, присутствующих в этих нескольких редукторах.
Например, предложение CLUSTER BY указано в имени столбца Id таблицы employees_guru. Выполнение этого запроса передает результаты нескольким редукторам на бэкэнде, но на фронтенде оно является альтернативным предложением как для SORT BY, так и для DISTRIBUTE BY.
Это процесс обработки запросов с использованием операторов SORT BY, GROUP BY или CLUSTER BY в рамках фреймворка MapReduce. Таким образом, если мы хотим сохранить результаты в нескольких редукторах, мы используем CLUSTER BY.
Грамматика CLUSTER BY принимает только имена столбцов, поэтому к ней нельзя добавлять ASC и DESC; для получения результата в порядке убывания требуется DISTRIBUTE BY с отдельной опцией SORT BY … DESC.
На скриншоте ниже показан запрос CLUSTER BY по идентификатору Id.
Из приведенного выше снимка экрана мы получаем следующие наблюдения:
- Это запрос, который применяет условие CLUSTER BY к значению поля Id. В данном случае он будет сортировать значения по Id.
- Здесь отображаются значения Id и Name, присутствующие в базе данных employees_guru, в отсортированном порядке.
Запрос:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Распространить
Предложение DISTRIBUTE BY используется для таблиц, присутствующих в Hive. Hive использует столбцы в предложении DISTRIBUTE BY для распределения строк между редукторами, поэтому все строки, имеющие одинаковое значение столбца в предложении DISTRIBUTE BY, попадают в один и тот же редуктор.
- Это гарантирует, что каждый из N редукторов не будет перекрываться.ping набор значений столбцов
- Он не сортирует выходные данные каждого редуктора, и нет гарантии, что совпадающие строки будут располагаться рядом друг с другом.
На скриншоте ниже показан запрос DISTRIBUTE BY по идентификатору Id.
На приведенном выше скриншоте можно заметить следующее:
- Предложение DISTRIBUTE BY применяется к идентификатору таблицы “employees_guru”.
- В выходных данных отображаются идентификатор (Id) и имя (Name). На серверной стороне строки с одинаковым идентификатором поступают в один и тот же редуктор.
Запрос:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Эти четыре пункта легко перепутать, поэтому в таблице ниже приведено их сравнение.
| пункт | Переходники | Что это гарантирует |
|---|---|---|
| СОРТИРОВАТЬ ПО | Одна | Полный порядок по всему результату |
| Сортировать по | Много | Заказ только в пределах каждого редуктора. |
| РАСПРОСТРАНЯТЬ ЧЕРЕЗ | Много | Один и тот же ключ попадает в один и тот же редуктор, но без сортировки. |
| КЛАСТЕР ПО | Много | Распределить по плюс Сортировать по, по возрастанию |







