Что такое язык запросов Hive? HiveQL OperaTORs

⚡ Умное резюме

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

  • 🧮 Пять семейств операторов: Операторы сравнения, арифметические, логические, операторы комплексных типов и конструкторы охватывают все выражения, необходимые для запроса HiveQL.
  • 🔍 Для сравнения принимается любой примитив: Реляционные операторы принимают все примитивные типы данных, в то время как LIKE, RLIKE и REGEXP работают только со строками.
  • Арифметические операции включают побитовые вычисления: Помимо четырех основных операций, HiveQL предоставляет возможность выполнения операций по модулю, побитового И, ИЛИ, Исключающего ИЛИ и НЕ для числовых типов.
  • 🧩 Вложенные данные имеют собственный синтаксис: A[n] достигает элемента массива, а M[key] достигает значения карты, и оба значения могут быть использованы везде, где допускается использование выражений.
  • ???? ️ Конструкторы создают сложные значения: Функции array(), map(), struct(), named_struct() и create_union() объединяют сложные столбцы внутри запроса.
  • 📚 Функции расширяют возможности операторов: Математические, строковые, датовые, условные, коллекционные и агрегатные функции обрабатывают задачи, которые не охватывает ни один оператор.

Что такое операторы языка запросов Hive (HiveQL)?

Что такое язык запросов 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 отвечает сканированием файлов, поэтому фильтрация по столбцу раздела обычно гораздо эффективнее, чем настройка самого оператора.

Часто задаваемые вопросы (FAQ)

Ключевые слова, операторные слова, такие как AND или LIKE, и имена функций обрабатываются без учета регистра, поэтому SELECT и select ведут себя одинаково. Строковые данные — нет: сравнение 'Sales' с 'sales' возвращает FALSE, если предварительно не применены методы upper() или lower().

Функция X / Y всегда возвращает число типа DOUBLE, даже если оба операнда являются целыми числами, поэтому 7 / 2 даст 3.5, а не 3. Используйте ключевое слово DIV для целочисленного деления и оператор % для остатка от деления.

Арифметические операции и операторы сравнения распространяют значение NULL: любое выражение, содержащее NULL, оценивается как NULL, а не как FALSE. Проверяйте значение с помощью IS NULL или IS NOT NULL и используйте резервный вариант с coalesce() или nvl() перед тем, как значение достигнет оператора.

Оператор LIKE использует подстановочные символы SQL, где % соответствует любой последовательности символов, а _ соответствует одной последовательности. Оператор RLIKE соответствует Java Регулярное выражение применяется к любой подстроке значения. REGEXP является синонимом RLIKE и ведет себя идентично.

Сначала связываются арифметические операторы, затем операторы сравнения, затем оператор НЕ, затем И, затем ИЛИ. Поскольку порядок легко неправильно истолковать в длинных предикатах, рекомендуется использовать скобки всякий раз, когда И и ИЛИ встречаются в одном предложении.

Да. Реляционные и логические операторы формируют условия объединения, арифметические операторы могут создавать группы.ping Доступ к ключам и сложным типам данных, таким как M[ключ], допустим везде, где разрешено выражение, включая списки SELECT, предложения WHERE и ORDER BY.

Помощники машинного обучения преобразуют фильтр на простом языке в предикат-кандидат и отмечают несоответствия типов, например, при сравнении строкового столбца с числовым. Всегда сверяйте сгенерированный оператор с приведенными выше таблицами, поскольку диалекты Hive различаются. Spark SQL и Presto.

Он хорошо обрабатывает распространенные предикаты и предлагает шаблоны coalesce() или CASE WHEN на основе короткого комментария. Он также использует синтаксис других движков, поэтому перед выполнением запроса проверьте побитовые операторы, доступ к сложным типам и любое имя функции с помощью DESCRIBE FUNCTION.

Подведем итог этой публикации следующим образом: