Hive предоставляет язык запросов типа SQL для целей ETL поверх файловой системы Hadoop.
Язык запросов Hive (HiveQL) предоставляет среду типа SQL в Hive для работы с таблицами, базами данных, запросами.
У нас может быть другой тип предложений, связанных с Hive, для выполнения различных манипуляций с данными и запросов. Для лучшей связи с различными узлами за пределами среды. HIVE также обеспечивает соединение JDBC.
Запросы Hive предоставляют следующие возможности:
- Моделирование данных, такое как создание баз данных, таблиц и т. Д.
- Функции ETL, такие как извлечение, преобразование и загрузка данных в таблицы.
- Объединяется для объединения разных таблиц данных
- Индивидуальные пользовательские сценарии для упрощения кода
- Инструмент для более быстрых запросов поверх Hadoop
В этой статье вы узнаете:
- Заказ по запросу
- Группировать по запросу
- Сортировать по
- Кластер по
- Распространить по
Создание таблицы в Hive
Прежде чем приступить к нашей основной теме этого руководства, сначала мы создадим таблицу, чтобы использовать ее в качестве ссылок для следующего руководства.
В этом руководстве мы собираемся создать таблицу «employee_guru» с 6 столбцами.
Из приведенного выше снимка экрана
- Мы создаем таблицу «employee_guru» со значениями 6 столбцов, такими как Id, Name, Age, Address, Salary, Department, которая принадлежит сотрудникам, присутствующим в организации «guru».
- На этом этапе мы загружаем данные в таблицу employee_guru. Данные, которые мы собираемся загрузить, будут помещены в файл Employees.txt.
Заказ по запросу:
Синтаксис ORDER BY в HiveQL аналогичен синтаксису ORDER BY в языке SQL.Order by - это предложение, которое мы используем с оператором «SELECT» в запросах Hive, который помогает сортировать данные. Предложение Order by использует столбцы в таблицах Hive для сортировки определенных значений столбцов, указанных в Order by. Для любого имени столбца, который мы определяем в предложении order by, запрос будет выбирать и отображать результаты в порядке возрастания или убывания конкретных значений столбца.
Если указанное поле «порядок по» является строкой, то результат будет отображаться в лексикографическом порядке. В конце концов, он должен быть передан единственному редуктору.
На снимке экрана выше мы можем наблюдать следующее
- Это запрос, который выполняется в таблице «employee_guru» с предложением ORDER BY с определенным именем столбца ORDER BY для Department.
«Отдел» - это строка, поэтому результаты будут отображаться в лексикографическом порядке.
- Это фактический результат запроса. Если мы рассмотрим его правильно, мы увидим, что результаты отображаются на основе столбца «Отдел», такого как ADMIN, Finance и т. Д. В порядке выполнения запроса.
Запрос :
SELECT * FROM employees_guru ORDER BY Department;
Группировать по запросу:
Предложение Group by использует столбцы в таблицах Hive для группировки определенных значений столбцов, упомянутых в group by. Для любого имени столбца, которое мы определяем в предложении «groupby», запрос будет выбирать и отображать результаты путем группировки определенных значений столбца.
Например, на приведенном ниже снимке экрана будет отображаться общее количество сотрудников, присутствующих в каждом отделе. Здесь у нас есть «Отдел» как Группа по значению.
На скриншоте выше мы увидим следующее
- Это запрос, который выполняется в таблице «employee_guru» с предложением GROUP BY с определенным именем столбца GROUP BY для отдела.
- Вывод, показанный здесь, - это название отдела, а количество сотрудников в разных отделах. Здесь все сотрудники, принадлежащие к определенному отделу, сгруппированы и отображаются в результатах. Таким образом, результатом является название отдела с общим количеством сотрудников, присутствующих в каждом отделе.
Запрос:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Сортировать по:
Предложение Sort by применяется к именам столбцов таблиц Hive для сортировки вывода. Мы можем упомянуть DESC для сортировки по убыванию и упомянуть ASC для сортировки по возрастанию.
В этой сортировке он будет сортировать строки перед подачей в редуктор. Всегда сортировать по типу столбца.
Например, если типы столбцов являются числовыми, он будет отсортирован в числовом порядке, если типы столбцов являются строковыми, он будет отсортирован в лексикографическом порядке.
На снимке экрана выше мы можем наблюдать следующее:
- Это запрос, который выполняется для таблицы «employee_guru» с предложением SORT BY с «id», определяющим имя столбца SORT BY. Мы использовали ключевое слово DESC.
- Таким образом, вывод будет отображаться в порядке убывания «id».
Запрос:
SELECT * from employees_guru SORT BY Id DESC;
Кластер по:
Cluster By используется как альтернатива для предложений Distribute BY и Sort BY в Hive-QL.
Предложение Cluster BY используется для таблиц, присутствующих в Hive. Hive использует столбцы в Cluster by для распределения строк между редукторами. Столбцы Cluster BY перейдут к нескольким редукторам.
- Он обеспечивает порядок сортировки значений, присутствующих в нескольких редукторах.
Например, предложение Cluster By упомянуто в имени столбца Id таблицы employee_guru. Выходные данные при выполнении этого запроса передадут результаты нескольким редукторам в бэкенде. Но в качестве внешнего интерфейса это альтернативное предложение для Sort By и Distribute By.
На самом деле это внутренний процесс, когда мы выполняем запрос с сортировкой, группировкой и кластеризацией по в терминах структуры сокращения карты. Поэтому, если мы хотим сохранить результаты в нескольких редукторах, мы используем Cluster By.
Из приведенного выше снимка экрана мы получаем следующие наблюдения:
- Это запрос, который выполняет предложение CLUSTER BY для значения поля Id. Здесь будет сортировка значений 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
- Вывод, показывающий Id, Name. В конце концов, он перейдет к тому же редуктору
Запрос:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;