Что такое язык запросов Hive? HiveQL OperaTORs
⚡ Умное резюме
Язык запросов Hive предоставляет операторы, которые управляют каждым выражением HiveQL, группировкой.ping их можно разделить на семейства реляционных, арифметических, логических, комплексных типов и конструкторов, которые в совокупности охватывают сравнение, вычисления и доступ к вложенным данным.

Что такое язык запросов Hive (HiveQL)?
Hive Query Language (HiveQL) — это язык запросов на Апачский улей Для обработки и анализа структурированных данных. Он избавляет пользователей от сложностей программирования MapReduce. Он повторно использует общие концепции из реляционных баз данных, такие как таблицы, строки, столбцы и схема, чтобы упростить обучение. Hive предоставляет интерфейс командной строки для написания запросов Hive с использованием языка запросов Hive (HiveQL).
Большинство взаимодействий обычно происходит через интерфейс командной строки (CLI). В целом синтаксис HiveQL аналогичен синтаксису SQL Синтаксис, знакомый большинству аналитиков данных. В оригинальной документации Hive указаны четыре формата файлов: TEXTFILE, SEQUENCEFILE, ORC и RCFILE (Record Columnar File); текущие версии также поддерживают чтение и запись файлов Parquet и Avro, а формат ORC используется в большинстве рекомендаций по оптимизации.
Hive использует встроенную базу данных Derby для хранения метаданных одним пользователем. Для многопользовательских или совместно используемых хранилищ метаданных Hive использует... MySQL или использовать другую внешнюю реляционную базу данных, поскольку Derby допускает только одну сессию одновременно.
HiveQL Встроенный OperaTORs
Hive предоставляет встроенные операторы для операций с данными, выполняемых над таблицами, хранящимися в хранилище данных Hive.
Эти операторы работают с операндами внутри выражения и возвращают значение в соответствии с примененной логикой, будь то сравнение, вычисление или поиск вложенного столбца.
Ниже перечислены основные типы встроенных операторов в HiveQL:
- Операторы отношения
- Арифметические операторы
- Логические операторы
- Operaторс на сложных типах
- Конструкторы сложных типов
Каждая семья описана в отдельном разделе ниже, где также приведена полная таблица операторов для этой семьи.
реляционный Operaторы в HiveQL
Для сравнения отношений между двумя операндами мы используем операторы сравнения.
- Operaтакие слова, как «равно», «не равно», «меньше» и «больше».
- В этих операторах все операнды являются примитивными типами, а операторы сопоставления с образцом принимают только строки.
Каждый оператор сравнения возвращает логическое значение (BOOLEAN), поэтому именно из этих операторов строятся условия WHERE, JOIN и оператор CASE WHEN. В следующей таблице приведены подробные сведения об операторах сравнения и их использовании в HiveQL:
| Встроенный Operaтор | Описание | Operand |
|---|---|---|
| Х = У | Истина, если выражение X эквивалентно выражению Y. В противном случае — ложь. | Он принимает все примитивные типы |
| Х != Y | Истина, если выражение X не эквивалентно выражению Y. В противном случае — ложь. | Он принимает все примитивные типы |
| Х < Y | Истина, если выражение X меньше выражения Y. В противном случае — ложь. | Он принимает все примитивные типы |
| Х <= Y | Истина, если выражение X меньше или равно выражению Y. В противном случае — ложь. | Он принимает все примитивные типы |
| X > Y | Истина, если выражение X больше выражения Y. В противном случае — ложь. | Он принимает все примитивные типы |
| X >= Y | Истина, если выражение X больше или равно выражению Y. В противном случае — ложь. | Он принимает все примитивные типы |
| Х ЕСТЬ НУЛЬ | Если выражение X принимает значение NULL, то значение равно TRUE, в противном случае — FALSE. | нужны все типы |
| X НЕ НУЛЬ | FALSE, если выражение X принимает значение NULL, в противном случае TRUE. | нужны все типы |
| Х НРАВИТСЯ Y | ИСТИНА, если строковый шаблон X совпадает с Y, в противном случае ЛОЖЬ. | Принимает только строки |
| Х РЛИК Y | NULL, если X или Y имеет значение NULL, TRUE, если любая подстрока X соответствует Java регулярное выражение Y, иначе ЛОЖЬ. | Принимает только строки |
| X РЕГЭКСПРЕЖЕНИЕ Y | То же, что и РЛИК. | Принимает только строки |
Обратите внимание, что сравнение с NULL никогда не возвращает TRUE или FALSE. Именно поэтому в таблице операторы IS NULL и IS NOT NULL указаны как отдельные операторы, а не предполагается, что X = NULL будет работать.
HiveQL Арифметика OperaTORs
Для выполнения арифметических операций над операндами мы используем арифметические операторы.
- Арифметические операции, такие как сложение, вычитаниеtracДля умножения, деления и деления между операндами используются эти операторы.
- В этих операторах все операнды имеют числовые типы.
Пример:
2 + 3 дает результат 5.
В этом примере '+' — это оператор, 2 и 3 — операнды, а возвращаемое значение равно 5.
В следующей таблице приведены подробные сведения об арифметических операторах в языке запросов Hive:
| Встроенный Operaтор | Описание | Operand |
|---|---|---|
| Х + У | Он вернет результат сложения значений X и Y. | Он принимает все типы чисел |
| Х – У | Она вернет результат выполнения подпрограммы.tracопределяя значение Y на основе значения X. | Он принимает все типы чисел |
| Х * У | Он вернет результат умножения значений X и Y. | Он принимает все типы чисел |
| Х/У | Он вернет результат деления Y на X. | Он принимает все типы чисел |
| Х % Y | Он вернет остаток от деления X на Y. | Он принимает все типы чисел |
| X и Y | Он вернет результат побитового И X и Y. | Он принимает все типы чисел |
| Х | Д | Он вернет результат побитового ИЛИ X и Y. | Он принимает все типы чисел |
| Х ^ У | Он вернет результат побитового XOR X и Y. | Он принимает все типы чисел |
| ~X | Он вернет вывод побитового НЕ X. | Он принимает все типы чисел |
Последние четыре строки представляют собой побитовые операции, а не обычную арифметику: они работают с двоичным представлением целочисленных операндов, поэтому &, | и ^ не то же самое, что логические операции И, ИЛИ и НЕ, рассматриваемые в следующем разделе.
Логический интерфейс HiveQL OperaTORs
Для выполнения логических операций над операндами мы используем логические операторы.
- Для логических операций, таких как И, ИЛИ и НЕ, между операндами используются эти операторы.
- В этих операторах все операнды имеют логический тип (BOOLEAN).
В следующей таблице приведены подробные сведения о логических операторах в HiveQL:
| OperaTORs | Описание | OperaНСР |
|---|---|---|
| Х И Y | ИСТИНА, если и X, и Y ИСТИНА, в противном случае ЛОЖЬ. | Только логические типы |
| X && Y | То же самое, что и X И Y, но здесь мы используем символ &&. | Только логические типы |
| Х ИЛИ Y | ИСТИНА, если либо X, либо Y, либо оба имеют значение ИСТИНА, в противном случае ЛОЖЬ. | Только логические типы |
| Х || Д | То же самое, что и X или Y, но здесь мы используем символ ||. | Только логические типы |
| НЕ Х | ИСТИНА, если X имеет значение ЛОЖЬ, в противном случае ЛОЖЬ. | Только логические типы |
| !X | То же самое, что и NOT X, но здесь мы используем символ !. | Только логические типы |
Поскольку операторы сравнения возвращают логические значения (BOOLEAN), их объединяют логические операторы: предикат, такой как salary > 50000 AND dept = 'Sales', связывает одну группу значений с другой.
Operaторы на сложных типах
Реляционные, арифметические и логические операторы работают только с одним скалярным значением. Hive также хранит столбцы в виде массивов, карт и структур, и для доступа к элементам внутри них требуется другой механизм. В следующей таблице приведены подробные сведения об операторах комплексных типов, которые обеспечивают этот механизм:
| OperaTORs | OperaНСР | Описание |
|---|---|---|
| А[н] | A — это массив, а n — целочисленный тип. | Функция вернет n-й элемент массива A. Первый элемент имеет индекс 0. |
| М[ключ] | М — это карта и ключ имеет тип K | Функция вернет значение, соответствующее ключу в карте. |
Обе формы являются обычными выражениями, поэтому они могут встречаться в списке SELECT, предложении WHERE или GROUP BY, а доступ к полю структуры осуществляется с помощью точечной нотации, например, S.field, вместо скобок.
Конструкторы сложного типа
Там, где указанные выше операторы считывают существующий сложный столбец, конструкторы создают его. В следующей таблице приведены подробные сведения о конструкторах сложных типов данных, которые создают экземпляры сложных типов данных — Array, Map и Struct — в Hive.
В этом разделе мы рассмотрим операции, выполняемые над конструкторами сложных типов.
| OperaTORs | OperaНСР | Описание |
|---|---|---|
| массив | (значение1, значение2, …) | Это создаст массив с указанными элементами, например, val1, val2. |
| создать_союз | (тег, значение1, значение2, …) | Это создаст объединяющий тип со значением, на которое ссылается параметр тега. |
| карта | (ключ1, значение1, ключ2, значение2, …) | Это создаст карту с заданными парами ключ/значение, указанными в операндах. |
| именованная_структура | (имя1, значение1, имя2, значение2, …) | Это создаст структуру с указанными именами полей и значениями, указанными в операндах. |
| структура | (значение1, значение2, значение3, …) | Создает структуру с заданными значениями полей. Имена полей структуры будут col1, col2 и так далее. |
Конструкторы чаще всего используются в операторах INSERT, которые заполняют сложный столбец, или в операторах SELECT, которые объединяют несколько скалярных столбцов в одну структуру перед записью результата в другую таблицу.
Встроенные функции HiveQL
OperaФункции `tors` охватывают сравнение, вычисления и доступ к элементам, но они не округляют числа, не обрезают строки и не выполняют подстановку.tracна двух датах. Эта работа относится к встроенным функциям Hive, которые вызываются по имени внутри тех же выражений, в которых появляются операторы. В таблице ниже сгруппированы семейства функций, с которыми начинает знакомиться начинающий пользователь.
| семейство функций | Типичные члены | Для чего он используется |
|---|---|---|
| Математический | round(), floor(), ceil(), abs(), pow(), sqrt(), rand() | Округление, возведение в степень и другие числовые вычисления над значениями одного столбца. |
| строка | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Чистка, стрижка и придание формы.ping текст перед сравнением или группировкой. |
| Время | current_date, year(), month(), datediff(), date_add(), unix_timestamp() | Extracчасти даты и интервалы измерения между двумя датами. |
| Условный | if(), CASE WHEN, coalesce(), nvl(), isnull() | Выбор значения на уровне строки и замена NULL на резервное значение. |
| | size(), map_keys(), map_values(), array_contains(), sort_array() | Проверка столбцов массивов, карт и структур, к которым обращаются операторы комплексных типов. |
| Тип преобразования | cast(), binary() | Принудительное присвоение столбцу типа, ожидаемого оператором. |
| Агрегат (UDAF) | count(), sum(), avg(), min(), max(), collect_set() | Объединение множества строк в одно значение, обычно в сочетании с оператором GROUP BY. |
Список функций зависит от версии Hive, поэтому его стоит читать непосредственно из сессии, а не со статической страницы. Для этого достаточно двух команд:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
Команда SHOW FUNCTIONS выводит список всех зарегистрированных имен, DESCRIBE FUNCTION печатает однострочную сигнатуру, а форма EXTENDED добавляет примеры использования, если они предоставлены реализующим классом. Если ни одна встроенная функция не подходит, Hive принимает... пользовательская функция написано в Java.
HiveQL против SQL: ключевые различия
HiveQL намеренно заимствует синтаксис SQL, и приведенные выше таблицы операторов покажутся знакомыми любому, кто писал SQL-запросы. Однако базовая модель выполнения отличается, и различия проявляются, как только запрос выходит за рамки простого SELECT.
| Поведение | HiveQL | Традиционный SQL (СУБД) |
|---|---|---|
| Обработка схем | Схема применяется при чтении — схема используется при запросе к файлу. | Схема при записи — схема применяется при вставке строки. |
| Обновление и удаление на уровне строк. | Поддерживается только для таблиц ACID; управляемые таблицы по умолчанию являются таблицами ACID, начиная с Hive 3.0. | Поддерживается по умолчанию для всех таблиц. |
| Индексы | Поддержка индексов была удалена в Hive 3.0 (HIVE-18448); её заменяют индексы на уровне файлов ORC или Parquet и материализованные представления. | B-дерево и другие вторичные индексы являются ключевой особенностью. |
| Выполнение и задержка | Компилируется в пакетные задания в Tez, MapReduce или SparkТаким образом, даже небольшие запросы влекут за собой затраты на запуск работы. | Интерактивное выполнение, обычно за миллисекунды. |
| Цель дизайна | Пропускная способность при работе с очень большими файлами в HDFS или объектном хранилище. | Низкая задержка при чтении и записи на одном сервере или в кластере. |
Практические последствия для выразительного письма незначительны, но ощутимы. OperaОператоры работают как положено, однако предикат, на который в реляционной базе данных ответили бы из индекса, в Hive отвечает сканированием файлов, поэтому фильтрация по столбцу раздела обычно гораздо эффективнее, чем настройка самого оператора.
