Запросы Hive: сортировка, группировка, распределение, кластеризация по примерам

Содержание:

Anonim

Hive предоставляет язык запросов типа SQL для целей ETL поверх файловой системы Hadoop.

Язык запросов Hive (HiveQL) предоставляет среду типа SQL в Hive для работы с таблицами, базами данных, запросами.

У нас может быть другой тип предложений, связанных с Hive, для выполнения различных манипуляций с данными и запросов. Для лучшей связи с различными узлами за пределами среды. HIVE также обеспечивает соединение JDBC.

Запросы Hive предоставляют следующие возможности:

  • Моделирование данных, такое как создание баз данных, таблиц и т. Д.
  • Функции ETL, такие как извлечение, преобразование и загрузка данных в таблицы.
  • Объединяется для объединения разных таблиц данных
  • Индивидуальные пользовательские сценарии для упрощения кода
  • Инструмент для более быстрых запросов поверх Hadoop

В этой статье вы узнаете:

  • Заказ по запросу
  • Группировать по запросу
  • Сортировать по
  • Кластер по
  • Распространить по

Создание таблицы в Hive

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

В этом руководстве мы собираемся создать таблицу «employee_guru» с 6 столбцами.

Из приведенного выше снимка экрана

  1. Мы создаем таблицу «employee_guru» со значениями 6 столбцов, такими как Id, Name, Age, Address, Salary, Department, которая принадлежит сотрудникам, присутствующим в организации «guru».
  2. На этом этапе мы загружаем данные в таблицу employee_guru. Данные, которые мы собираемся загрузить, будут помещены в файл Employees.txt.

Заказ по запросу:

Синтаксис ORDER BY в HiveQL аналогичен синтаксису ORDER BY в языке SQL.

Order by - это предложение, которое мы используем с оператором «SELECT» в запросах Hive, который помогает сортировать данные. Предложение Order by использует столбцы в таблицах Hive для сортировки определенных значений столбцов, указанных в Order by. Для любого имени столбца, который мы определяем в предложении order by, запрос будет выбирать и отображать результаты в порядке возрастания или убывания конкретных значений столбца.

Если указанное поле «порядок по» является строкой, то результат будет отображаться в лексикографическом порядке. В конце концов, он должен быть передан единственному редуктору.

На снимке экрана выше мы можем наблюдать следующее

  1. Это запрос, который выполняется в таблице «employee_guru» с предложением ORDER BY с определенным именем столбца ORDER BY для Department.

    «Отдел» - это строка, поэтому результаты будут отображаться в лексикографическом порядке.

  2. Это фактический результат запроса. Если мы рассмотрим его правильно, мы увидим, что результаты отображаются на основе столбца «Отдел», такого как ADMIN, Finance и т. Д. В порядке выполнения запроса.

Запрос :

SELECT * FROM employees_guru ORDER BY Department;

Группировать по запросу:

Предложение Group by использует столбцы в таблицах Hive для группировки определенных значений столбцов, упомянутых в group by. Для любого имени столбца, которое мы определяем в предложении «groupby», запрос будет выбирать и отображать результаты путем группировки определенных значений столбца.

Например, на приведенном ниже снимке экрана будет отображаться общее количество сотрудников, присутствующих в каждом отделе. Здесь у нас есть «Отдел» как Группа по значению.

На скриншоте выше мы увидим следующее

  1. Это запрос, который выполняется в таблице «employee_guru» с предложением GROUP BY с определенным именем столбца GROUP BY для отдела.
  2. Вывод, показанный здесь, - это название отдела, а количество сотрудников в разных отделах. Здесь все сотрудники, принадлежащие к определенному отделу, сгруппированы и отображаются в результатах. Таким образом, результатом является название отдела с общим количеством сотрудников, присутствующих в каждом отделе.

Запрос:

SELECT Department, count(*) FROM employees_guru GROUP BY Department;

Сортировать по:

Предложение Sort by применяется к именам столбцов таблиц Hive для сортировки вывода. Мы можем упомянуть DESC для сортировки по убыванию и упомянуть ASC для сортировки по возрастанию.

В этой сортировке он будет сортировать строки перед подачей в редуктор. Всегда сортировать по типу столбца.

Например, если типы столбцов являются числовыми, он будет отсортирован в числовом порядке, если типы столбцов являются строковыми, он будет отсортирован в лексикографическом порядке.

На снимке экрана выше мы можем наблюдать следующее:

  1. Это запрос, который выполняется для таблицы «employee_guru» с предложением SORT BY с «id», определяющим имя столбца SORT BY. Мы использовали ключевое слово DESC.
  2. Таким образом, вывод будет отображаться в порядке убывания «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.

Из приведенного выше снимка экрана мы получаем следующие наблюдения:

  1. Это запрос, который выполняет предложение CLUSTER BY для значения поля Id. Здесь будет сортировка значений Id.
  2. Он отображает идентификатор и имена, присутствующие в сортировке guru_employees, упорядоченные по

Запрос:

SELECT Id, Name from employees_guru CLUSTER BY Id;

Распространять по:

Предложение Distribute BY, используемое для таблиц, присутствующих в Hive. Hive использует столбцы в Distribute by для распределения строк между редукторами. Все столбцы Distribute BY перейдут к одному редуктору.

  • Это гарантирует, что каждый из N редукторов получит неперекрывающиеся диапазоны столбца
  • Он не сортирует вывод каждого редуктора

На скриншоте выше мы можем наблюдать следующее

  1. Предложение DISTRIBUTE BY выполняется для идентификатора таблицы empoloyees_guru
  2. Вывод, показывающий Id, Name. В конце концов, он перейдет к тому же редуктору

Запрос:

SELECT Id, Name from employees_guru DISTRIBUTE BY Id;