Що таке мова запитів Hive? HiveQL Operaторс

⚡ Розумний підсумок

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

  • 🧮 П'ять сімейств операторів: Реляційні, арифметичні, логічні, комплексні та конструкторські оператори охоплюють кожен вираз, необхідний для запиту HiveQL.
  • 🔍 Порівняння приймає будь-який примітив: Реляційні оператори приймають усі примітивні типи, тоді як LIKE, RLIKE та REGEXP працюють лише з рядками.
  • Арифметика включає побітові операції: Окрім чотирьох основних операцій, HiveQL надає доступ до операцій AND, OR, XOR та NOT за модулем та побітово для числових типів.
  • 🧩 Вкладені дані мають власний синтаксис: A[n] досягає елемента масиву, а M[key] досягає значення карти, обидва можна використовувати будь-де, де дозволено вираз.
  • 🏗️ Конструктори будують складні значення: array(), map(), struct(), named_struct() та create_union() збирають складні стовпці всередині запиту.
  • 📚 Функції розширюють оператори: Математичні, рядкові, датні, умовні, колекційні та агрегатні функції обробляють роботу, яку не охоплює жоден оператор.

Що таке оператори мови запитів Hive (HiveQL)?

Що таке Hive Query Language (HiveQL)?

Hive Query Language (HiveQL) — це мова запитів у Вулик апачів для обробки та аналізу структурованих даних. Це відокремлює користувачів від складного програмування MapReduce. Він повторно використовує поширені концепції з реляційних баз даних, такі як таблиці, рядки, стовпці та схеми, для спрощення навчання. Hive надає CLI для написання запитів Hive за допомогою мови запитів Hive (HiveQL).

Більшість взаємодій зазвичай відбувається через інтерфейс командного рядка (CLI). Загалом синтаксис HiveQL схожий на синтаксис SQL синтаксис, з яким знайома більшість аналітиків даних. Чотири формати файлів, названі в оригінальній документації Hive, це TEXTFILE, SEQUENCEFILE, ORC та RCFILE (Record Columnar File); поточні версії також читають і записують Parquet та Avro, і ORC – це формат, який передбачає більшість посібників з налаштування.

Hive використовує вбудовану базу даних Derby для зберігання метаданих для одного користувача. Для розгортання для кількох користувачів або спільного розгортання сховища метаданих Hive використовує MySQL або іншу зовнішню реляційну базу даних, оскільки Derby дозволяє одночасно працювати лише з одним сеансом.

Вбудований HiveQL Operaторс

Hive надає вбудовані оператори для операцій з даними, які виконуються з таблицями, що зберігаються у сховищі Hive.

Ці оператори діють на операнди всередині виразу та повертають значення відповідно до застосованої логіки, незалежно від того, чи є ця логіка порівнянням, обчисленням чи пошуком у вкладеному стовпці.

Нижче наведено основні типи вбудованих операторів у HiveQL:

  • Оператори відношення
  • Арифметичні оператори
  • Логічні оператори
  • Operaтори на складних типах
  • Конструктори складних типів

Кожна родина розглядається в окремому розділі нижче, разом із повною таблицею операторів для цієї родини.

Реляційний Operaторів у HiveQL

Ми використовуємо реляційні оператори для порівняння відношень між двома операндами.

  • Operaтакі терміни, як дорівнює, не дорівнює, менше ніж та більше ніж.
  • Типи операндів у цих операторах є примітивними типами, а оператори зіставлення зі зразком приймають лише рядки.

Кожен реляційний оператор повертає логічне значення (BOOLEAN), тому саме з цих операторів будуються речення WHERE, умова JOIN та гілка CASE WHEN. У наступній таблиці наведено детальну інформацію про реляційні оператори та їх використання в HiveQL:

Вбудований Operaтор Опис Operand
X = Y ІСТИНА, якщо вираз X еквівалентний виразу Y. Інакше ХИБНІСТЬ. Він приймає всі примітивні типи
X != Y ІСТИНА, якщо вираз X не еквівалентний виразу Y. Інакше ХИБНІСТЬ. Він приймає всі примітивні типи
X < Y ІСТИНА, якщо вираз X менший за вираз Y. Інакше ХИБНІСТЬ. Він приймає всі примітивні типи
X <= Y ІСТИНА, якщо вираз X менший або дорівнює виразу Y. Інакше ХИБНІСТЬ. Він приймає всі примітивні типи
X > Y ІСТИНА, якщо вираз X більший за вираз Y. Інакше ХИБНІСТЬ. Він приймає всі примітивні типи
X >= Y ІСТИНА, якщо вираз X більший або дорівнює виразу Y. Інакше ХИБНІСТЬ. Він приймає всі примітивні типи
X ПОРАЖУЄ НУЛЬ TRUE (ІСТИНА), якщо вираз X має значення NULL, інакше FALSE (ХИБНІСТЬ). Він приймає всі види
X НЕ Є NULL FALSE (ХИБНІСТЬ), якщо вираз X має значення NULL, інакше TRUE (ІСТИНА). Він приймає всі види
X ЯК Y TRUE (ИСТИНА), якщо рядковий шаблон X збігається з Y, інакше FALSE (ХИБНІСТЬ). Приймає лише рядки
X RLIKE Y NULL, якщо X або Y дорівнює NULL, TRUE, якщо будь-який підрядок X відповідає Java регулярний вираз Y, інакше FALSE. Приймає лише рядки
X REGEXP Y Те саме, що RLIKE. Приймає лише рядки

Зверніть увагу, що порівняння з NULL ніколи не повертає TRUE або FALSE. Саме тому в таблиці оператори IS NULL та IS NOT NULL перелічені як окремі, а не очікується, що X = NULL працюватиме.

Арифметика HiveQL Operaторс

Ми використовуємо арифметичні оператори для виконання арифметичних операцій над операндами.

  • Арифметичні операції, такі як додавання, відніманняtracМноження та ділення між операндами використовують ці оператори.
  • Типи операндів у цих операторах є числовими типами.

Приклад:

2 + 3 дає результат 5.

У цьому прикладі '+' – це оператор, 2 та 3 – операнди, а повернене значення – 5.

У наступній таблиці наведено детальну інформацію про арифметичні оператори в мові запитів Hive:

Вбудований Operaтор Опис Operand
X+Y Він поверне результат додавання значень X і Y. Він приймає всі типи чисел
X – Y Він поверне вивід підпрограмиtracвід значення Y до значення X. Він приймає всі типи чисел
X * Y Він поверне результат множення значень X і Y. Він приймає всі типи чисел
X / Y Він поверне результат ділення Y від X. Він приймає всі типи чисел
X % Y Він поверне залишок, отриманий від ділення X на Y. Він приймає всі типи чисел
X & Y Він поверне результат порозрядного І для X і Y. Він приймає всі типи чисел
X | Ю Він поверне результат порозрядного АБО X і Y. Він приймає всі типи чисел
X ^ Y Він поверне результат порозрядного XOR X і Y. Він приймає всі типи чисел
~X Він поверне результат побітового НЕ X. Він приймає всі типи чисел

Останні чотири рядки є побітовими, а не звичайними арифметичними операціями: вони оперують з двійковим представленням цілочисельних операндів, тому &, | та ^ не є тими самими, що й логічні І, АБО та НЕ, які розглядаються в наступному розділі.

Логічний HiveQL Operaторс

Ми використовуємо логічні оператори для виконання логічних операцій над операндами.

  • Логічні операції, такі як І, АБО та НЕ між операндами, використовують ці оператори.
  • Усі типи операндів у цих операторах є логічними.

У наступній таблиці наведено детальну інформацію про логічні оператори в HiveQL:

Operaторс Опис OperaНСР
X І Y TRUE, якщо і X, і Y є TRUE, інакше FALSE. Лише логічні типи
X && Y Те саме, що й X ТА Y, але тут ми використовуємо символ &&. Лише логічні типи
X АБО Y TRUE, якщо X або Y або обидва є TRUE, інакше FALSE. Лише логічні типи
X || Ю Те саме, що й X АБО Y, але тут ми використовуємо символ ||. Лише логічні типи
НЕ X TRUE, якщо X є FALSE, інакше FALSE. Лише логічні типи
!X Те саме, що й NOT X, але тут ми використовуємо символ !. Лише логічні типи

Оскільки реляційні оператори повертають логічне значення, їх об'єднують логічні оператори: предикат, такий як зарплата > 50000 ТА відділ = 'Продажі', пов'язує одну родину з іншою.

Operaтори на складні типи

Реляційні, арифметичні та логічні оператори працюють з одиничними скалярними значеннями. Hive також зберігає стовпці масивів, мап та структур, і їм потрібен інший механізм для доступу до елементів усередині них. У наступній таблиці наведено детальну інформацію про оператори складних типів, які забезпечують цей механізм:

Operaторс OperaНСР Опис
A[n] A — це масив, а n — цілий тип Він поверне n-й елемент масиву A. Перший елемент має індекс 0.
M[ключ] М — карта і ключ має тип K Він поверне значення, що належить ключу на мапі.

Обидві форми є звичайними виразами, тому вони можуть з'являтися у списку SELECT, реченні WHERE або GROUP BY, а поле структури досягається за допомогою крапкової нотації, такої як S.field, замість квадратної дужки.

Конструктори складного типу

Там, де вищезгадані оператори зчитують існуючий складний стовпець, конструктори будують його. У наступній таблиці наведено детальну інформацію про конструктори складних типів, які створюють екземпляри складних типів даних — Array, Map та Struct — у Hive.

У цьому розділі ми розглянемо операції, що виконуються над конструкторами складних типів.

Operaторс OperaНСР Опис
масив (val1, val2, …) Він створить масив із заданими елементами, як зазначено, наприклад, val1, val2.
create_union (тег, значення1, значення2, …) Це створить тип об'єднання зі значенням, на яке посилається параметр тегу.
карта (ключ1, значення1, ключ2, значення2, …) Це створить карту з заданими парами ключ/значення, згаданими в операндах.
іменована_структура (ім'я1, значення1, ім'я2, значення2, …) Це створить структуру Struct із заданими іменами полів та значеннями, згаданими в операндах.
структура (val1, val2, val3, …) Створює структуру із заданими значеннями полів. Назви полів структури будуть col1, col2 тощо.

Конструктори найчастіше використовуються в INSERT, який заповнює складний стовпець, або в SELECT, який упаковує кілька скалярних стовпців в одну структуру перед записом результату в іншу таблицю.

Вбудовані функції HiveQL

OperaІнструменти охоплюють порівняння, обчислення та доступ до елементів, але вони не округлюють числа, не обрізають рядки або не виконують підрядкові дії.tracдві дати. Ця робота належить до вбудованих функцій Hive, які викликаються за іменем у тих самих виразах, у яких з'являються оператори. У таблиці нижче згруповано сімейства, з якими новачок зустрічається першим.

Сімейство функцій Типові учасники Для чого його використовують
Математичний округлення(), підлога(), стеля(), абс(), потужність(), квадрат(), випадковий() Округлення, піднесення до степенів та інші числові обчислення над значенням одного стовпця.
рядок concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() Чищення, обрізка та реставраціяping текст перед його порівнянням або групуванням.
Дата поточна_дата, рік(), місяць(), дата_диференціала(), дата_додавання(), unix_часова_позначка() Extracрозділення частин дати та вимірювання інтервалів між двома датами.
умовний якщо(), ВИПАДОК КОЛИ, об'єднання(), nvl(), isnull() Вибір значення на рівні рядка та заміна NULL резервним значенням.
COLLECTION розмір(), ключі_картки(), значення_картки(), масив_містить(), сортування_масиву() Перевірка стовпців масиву, карти та структури, до яких звертаються оператори комплексного типу.
Перетворення типу приведення(), бінарний() Примусове призначення стовпця типу, який очікує оператор.
Агрегат (UDAF) підрахунок(), сума(), середнє(), мін(), макс(), колекція_наборів() Згортання багатьох рядків в одне значення, зазвичай разом з 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 отримує відповідь шляхом сканування файлів, тому фільтрація за стовпцем розділу зазвичай має набагато більше значення, ніж налаштування самого оператора.

Поширені запитання

Ключові слова, слова-оператори, такі як 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 відповідає a Java регулярний вираз для будь-якого підрядка значення. REGEXP є синонімом RLIKE та поводиться ідентично.

Спочатку зв'язуються арифметичні оператори, потім оператори порівняння, потім НЕ, потім І, потім АБО. Оскільки порядок легко неправильно прочитати в довгих предикатах, рекомендується використовувати дужки щоразу, коли І та АБО зустрічаються в одному реченні.

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

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

Він добре обробляє поширені предикати та пропонує шаблони coalesce() або CASE WHEN з короткого коментаря. Він також поєднує синтаксис з інших механізмів, тому перевірте побітові оператори, доступ до складних типів та будь-яке ім'я функції за допомогою DESCRIBE FUNCTION перед виконанням запиту.

Підсумуйте цей пост за допомогою: