Запросы Hive: Упорядочить по, Группировать по, Распределить по, Cluster По примерам
Hive предоставляет язык запросов типа SQL для целей ETL поверх Hadoop файловая система.
Язык запросов Hive (HiveQL) предоставляет среду типа SQL в Hive для работы с таблицами, базами данных и запросами.
У нас могут быть разные типы предложений, связанные с Hive, для выполнения различных манипуляций с данными и выполнения запросов. Для лучшей связи с различными узлами вне среды. HIVE также обеспечивает подключение JDBC.
Запросы Hive предоставляют следующие возможности:
- Моделирование данных, такое как создание баз данных, таблиц и т. д.
- Функции ETL, такие как извлечение, преобразование и загрузка данных в таблицы.
- Играя объединить разные таблицы данных
- Специальные пользовательские сценарии для упрощения написания кода.
- Инструмент более быстрого запроса на базе Hadoop
Создание таблицы в Hive
Прежде чем приступить к основной теме этого урока, сначала мы создадим таблицу, чтобы использовать ее в качестве ссылки для следующего урока.
В этом уроке мы собираемся создать таблицу «employees_guru» с 6 столбцами.
Судя по приведенному выше снимку экрана,
- Мы создаем таблицу «employees_guru» со значениями 6 столбцов, такими как идентификатор, имя, возраст, адрес, зарплата, отдел, которые принадлежат сотрудникам, присутствующим в организации «гуру».
- На этом этапе мы загружаем данные в таблицу сотрудников_гуру. Данные, которые мы собираемся загрузить, будут помещены в файл «Сотрудники.txt».
Упорядочить по запросу
Синтаксис ORDER BY в HiveQL аналогичен синтаксису ORDER BY в SQL язык.
Order by — это предложение, которое мы используем с оператором «SELECT» в Запросы улья, который помогает сортировать данные. Предложение Order by использует столбцы в таблицах Hive для сортировки определенных значений столбцов, упомянутых в параметре Order by. Для какого бы имени столбца мы ни определяли порядок по предложению, запрос будет выбирать и отображать результаты в порядке возрастания или убывания конкретных значений столбца.
Если упомянутое поле «Упорядочить по» является строкой, то результат будет отображаться в лексикографическом порядке. На задней стороне его необходимо передать одному редуктору.
На снимке экрана выше мы можем наблюдать следующее
- Это запрос, который выполняется к таблице «employees_guru» с предложением ORDER BY, в котором «Отдел» определяется именем столбца ORDER BY. «Отдел» имеет значение String, поэтому он будет отображать результаты на основе лексикографического порядка.
- Это фактический результат запроса. Если мы внимательно посмотрим на это, мы увидим, что результаты отображаются на основе столбца отдела, такого как ADMIN, Finance и т. д., для выполнения запроса orderQuery.
Запрос:
SELECT * FROM employees_guru ORDER BY Department;
Группировать по запросу
Предложение Group by использует столбцы в таблицах Hive для группировки определенных значений столбцов, упомянутых в предложении group by. Для какого бы имени столбца мы ни определяли предложение «groupby», запрос будет выбирать и отображать результаты, группируя определенные значения столбца.
Например, на снимке экрана ниже будет показано общее количество сотрудников, присутствующих в каждом отделе. Здесь у нас есть «Отдел» как группа по значению.
На приведенном выше скриншоте мы увидим следующее
- Это запрос, который выполняется к таблице «employees_guru» с предложением GROUP BY, где в качестве имени столбца указано «Отдел».
- Здесь показаны названия отделов и количество сотрудников в разных отделах. Здесь все сотрудники, принадлежащие конкретному отделу, группируются и отображаются в результатах. В результате получается название отдела и общее количество сотрудников, присутствующих в каждом отделе.
Запрос:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Сортировать по:
Предложение Sort by применяется к именам столбцов таблиц Hive для сортировки выходных данных. Мы можем упомянуть DESC для сортировки по убыванию и упомянуть ASC для сортировки по возрастанию.
При такой сортировке строки будут сортироваться перед подачей в редуктор. Всегда сортировать по зависит от типов столбцов.
Например, если типы столбцов являются числовыми, они будут сортироваться в числовом порядке, если типы столбцов являются строковыми, они будут сортироваться в лексикографическом порядке.
На приведенном выше снимке экрана мы можем наблюдать следующее:
- Это запрос, который выполняется к таблице «employees_guru» с предложением SORT BY, где «id» определяет имя столбца SORT BY. Мы использовали ключевое слово DESC.
- Таким образом, отображаемый вывод будет в порядке убывания «id».
Запрос:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By используется в качестве альтернативы предложениям Distribute BY и Sort BY в Hive-QL.
Cluster Предложение BY, используемое в таблицах, присутствующих в Hive. Hive использует столбцы в Cluster by, чтобы распределить строки между редукторами. Cluster Столбцы BY перейдут к нескольким редукторам.
- Он обеспечивает порядок сортировки значений, присутствующих в нескольких редукторах.
Например, Cluster По предложению, указанному в имени столбца Id таблицы jobs_guru table. Вывод при выполнении этого запроса даст результаты нескольким редукторам на внутренней стороне. Но в качестве внешнего интерфейса это альтернативное предложение как для сортировки, так и для распределения.
Это на самом деле бэкэнд-процесс, когда мы выполняем запрос с сортировкой по, группировкой по и кластеризацией по в терминах Map reduce framework. Так что если мы хотим сохранить результаты в нескольких редукторах, мы идем с Cluster К.
Из приведенного выше снимка экрана мы получаем следующие наблюдения:
- Это запрос, который выполняет предложение CLUSTER BY для значения поля Id. Здесь будет выполнена сортировка по значениям идентификаторов.
- Он отображает идентификатор и имена, присутствующие в сортировке guru_employees, упорядоченные по
Запрос:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Распространить
Предложение Distribute BY, используемое в таблицах, присутствующих в Hive. Hive использует столбцы в Distribute by для распределения строк между редукторами. Все столбцы Distribute BY будут отправлены в один и тот же редуктор.
- Это гарантирует, что каждый из N редукторов получит непересекающиеся диапазоны столбцов.
- Он не сортирует выходные данные каждого редуктора
На скриншоте выше мы можем наблюдать следующее
- DISTRIBUTE BY Выполнение предложения по идентификатору таблицы «empoloyees_guru»
- Вывод, показывающий идентификатор, имя. На заднем конце он пойдет в тот же редуктор
Запрос:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;