Типи даних Hive: як створювати та видаляти бази даних у Hive

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

Типи даних Hive визначають, що може містити кожен стовпець таблиці, а команди CREATE DATABASE та DROP DATABASE налаштовують або видаляють простір імен, у якому знаходяться ці таблиці в метасховищі Hive.

  • 🔢 Числові типи: Функції від TINYINT до BIGINT охоплюють цілі числа, тоді як DECIMAL(precision, scale) зберігає точні значення, яких FLOAT та DOUBLE не можуть зберігати.
  • 🔤 Типи рядків: STRING не має оголошеного обмеження на кількість символів, VARCHAR приймає від 1 до 65535, а CHAR має фіксовану довжину до 255.
  • 📅 Дата і час: DATE зберігає просте значення у форматі РРРР-ММ-ДД, а TIMESTAMP додає до нього точність у наносекундах (опціонально).
  • 🧩 Складні типи: ARRAY, MAP, STRUCT та UNIONTYPE поміщають кілька пов'язаних значень в один стовпець замість багатьох.
  • 🏗️ Створіть базу даних: CREATE DATABASE реєструє простір імен у метасховищі, а SHOW DATABASES підтверджує його існування.
  • 🗑️ Видалити базу даних: DROP DATABASE видаляє простір імен, а CASCADE потрібен щоразу, коли таблиці все ще знаходяться всередині нього.

Типи даних Hive та як створювати та видаляти бази даних у Hive

Типи даних є дуже важливими елементами мови запитів Hive та моделювання даних. Для визначення типів стовпців таблиці нам потрібно знати про типи даних та їх використання.

Нижче наведено короткий огляд деяких типів даних, присутніх у Hive:

  • Числові типи
  • Типи рядків
  • Типи дати/часу
  • Складні типи

Типи даних у Hive

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

Числові типи даних Hive

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

тип Розподіл пам'яті
TINYINT 1-байтове ціле число зі знаком (від -128 до 127)
СМАЛІНТ 2-байтове ціле число зі знаком (від -32,768 до 32,767)
INT 4-байтове ціле число зі знаком (від -2,147,483,648 до 2,147,483,647)
ВЕЛИКИЙ 8-байтове ціле число зі знаком (від -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807)
ПЛОС 4-байтове число з плаваючою комою одинарної точності
ПОДВІЙНИЙ 8-байтове число з плаваючою комою подвійної точності
DECIMAL Ми можемо визначити точність (precision) та масштаб (scale) у цьому типі як DECIMAL(precision, scale). Коли вони пропущені, Hive використовує DECIMAL(10,0).

Типи даних Hive String

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

тип довжина
CHAR Фіксована довжина, до 255 символів. Коротші значення доповнюються пробілами.
ВАРЧАР Від 1 до 65 535 символів. Довше значення непомітно обрізається.
STRING Тут ми можемо визначити довжину (без обмежень)

Типи даних дати/часу вулика

Тимчасові стовпці зберігаються без будь-якого зміщення часового поясу, що варто пам'ятати перед порівнянням значень, записаних різними кластерами.

тип Використання
Timestamp Підтримує традиційне Юнекс позначка часу з додатковою точністю до наносекунд
Дата Він має формат РРРР-ММ-ДД.
Діапазон значень, що підтримуються для типу Date, становить від 0000-01-01 до 9999-12-31, залежно від підтримки примітивом. Java типова дата

Різні типи даних Hive

Два інших примітиви знаходяться поза числовими, рядковими та датовими сімействами, але регулярно з'являються в реальних схемах.

тип Використання
BOOLEAN Зберігає значення «true» або «false»
BINARY Зберігає масив байтів, що запобігає потраплянню необробленого вмісту до стовпця STRING

Комплексні типи даних Hive

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

тип Використання
Масиви МАСИВ
Від’ємні значення та неконстантні вирази заборонені
карти КАРТА
Від’ємні значення та неконстантні вирази заборонені
Структури СТРУКТУРА
Union ТИПУ СПІЛЮВАННЯ

Приклад складних типів даних Hive

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

CREATE TABLE employees (
  name      STRING,
  skills    ARRAY<STRING>,
  deductions MAP<STRING, FLOAT>,
  address   STRUCT<street:STRING, city:STRING, pin:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

Тут потрібні три окремі роздільники: один між стовпцями, другий між елементами масиву ARRAY або STRUCT, і третій між ключем MAP та його значенням. Після того, як таблиця існує, кожен складний стовпець зчитується з власним методом доступу.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

У таблиці нижче підсумовано, який аксесор належить до якого типу.

тип Як зчитується значення
МАСІВ Індекс, що базується на нулі, такий як навички[0]
MAP Пошук ключа в квадратних дужках, наприклад, deductions['tax']
СТРУКТУРА Крапкова нотація в назві поля, наприклад, адреса.місто
ТИП СПІЛЮВАННЯ Рідко використовується, оскільки підтримка запитів до нього залишається неповною

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

Як створювати та видаляти бази даних у Hive

База даних у Hive — це просто простір імен, який групує таблиці, тому це перший об'єкт, який створюється перед початком будь-якої роботи з таблицями. Нижче наведено кроки щодо створення та видалення баз даних у Hive.

Крок 1) Створення бази даних у Hive

Для створення бази даних в оболонці Hive нам потрібно використовувати команду, синтаксис як показано нижче:

Синтаксис:

Create database <DatabaseName>

Приклад: Створення бази даних «guru99»

На скріншоті нижче показано оператор create, а потім команду show, яка перераховує всі бази даних у кластері.

Оболонка Hive створює базу даних guru99 та перераховує бази даних за допомогою show

З наведеного вище скріншоту видно, що ми робимо дві речі:

  1. Створення бази даних “guru99” у Hive
  2. Відображення існуючих баз даних за допомогою команди «show»

На тому ж екрані база даних «guru99» відображається в кінці виконання команди show, що означає, що база даних «guru99» успішно створена.

Крок 2) Перетягніть базу даних у Hive

Для падінняping Для бази даних в оболонці Hive нам потрібно використовувати команду «drop», як показано в синтаксисі нижче:

Синтаксис:

Drop database <DatabaseName>

Приклад: Видалити базу даних guru99

На наступному скріншоті оператор drop виконується першим, а наступна команда show більше не відображає базу даних.

Падіння шкаралупи вуликаping база даних guru99 та підтвердження видалення за допомогою show

На наведеному вище скріншоті ми робимо дві речі:

  1. Ми падаємоping база даних 'guru99' з Hive
  2. Перевірка того ж за допомогою команди «показати»

На тому ж екрані, після перевірки баз даних за допомогою команди show, база даних «guru99» не відображається в Hive. Тож тепер ми можемо підтвердити, що база даних «guru99» видалена.

Команди бази даних Hive: USE, DESCRIBE, SHOW та ALTER DATABASE

Два наведені вище оператори використовують свою найкоротшу форму. Задокументований синтаксис містить додаткові речення, які визначають, куди потрапляють файли та що відбувається, коли ім'я вже зайняте.

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

Ключові слова DATABASE та SCHEMA взаємозамінні, тому CREATE SCHEMA та CREATE DATABASE виконують ту саму дію. Решта команд доповнюють щоденну роботу з простором імен.

Command Що вона робить
ПОКАЗАТИ БАЗИ ДАНИХ; Перелічує всі бази даних, зареєстровані в метасховищі
USE назва_бази_даних; Встановлює поточну базу даних таким чином, щоб імена таблиць не потребували префікса
DESCRIBE DATABASE ім'я_бази_даних; Повідомляє про коментар, місцезнаходження HDFS та власника
DESCRIBE DATABASE EXTENDED ім'я_бази_даних; Додає пари ключ-значення DBPROPERTIES до цього виводу
ALTER DATABASE ім'я_бази_даних SET DBPROPERTIES (…); Додає або замінює властивості метаданих
ALTER DATABASE назва_бази_даних SET ВЛАСНИК КОРИСТУВАЧ ім'я_користувача; Передає право власності іншому користувачеві або ролі
ALTER DATABASE ім'я_бази_даних ВСТАНОВИТИ РОЗТАШУВАННЯ шлях_до_hdfs; Змінює шлях, який використовуються таблицями, створеними з цього моменту

Варто запам'ятати два значення за замовчуванням. Без речення LOCATION файли знаходяться в каталозі сховища даних, зазвичай /user/hive/warehouse/database_name.db, а без IF EXISTS видалення на відсутнє ім'я викликає помилку, а не передає дані непомітно. Обидва налаштування зберігаються в Метасховище вулика.

Перетворення типів даних Hive та поширені помилки

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

  • Неявне розширення виконується за ланцюжком TINYINT до SMALLINT, потім до INT, потім до BIGINT, потім до FLOAT, потім до DOUBLE, а рядок STRING, що містить цифри, перетворюється на DOUBLE.
  • Звуження ніколи не відбувається саме по собі, тому значення DOUBLE, призначене стовпцю INT, потребує письмового перетворення.
  • CAST виконує це записане перетворення та повертає NULL, а не помилку, коли значення не може бути перетворене.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Наведені нижче помилки пояснюють більшість несподіванок, з якими стикаються новачки на своїх перших схемах.

симптом Причина та усунення
Видалення не вдається, поки база даних ще містить таблиці RESTRICT використовується за замовчуванням. Додайте CASCADE, щоб видалити таблиці разом з ним.
Довгий рядок прибуває укороченим VARCHAR непомітно скорочує довжину, що перевищує заявлену. Використовуйте STRING, коли обмеження не потрібне.
Стовпець після перетворення читається як NULL CAST не зміг проаналізувати значення. Перевірте вихідні дані, перш ніж розширювати тип.
Вартість валюти втрачає свої копійки або центи DECIMAL без аргументів означає DECIMAL(10,0). Чітко вкажіть масштаб
Дві однакові дати ніколи не збігаються Дата типу STRING та стовпець типу DATE – це різні типи. Відкиньте одну сторону перед порівнянням.

Після того, як типи поведуть себе, наступним кроком є ​​завантаження та запитування самих даних, що розглядається в Запити до куща з функціями «Упорядкування за», «Групування за» та Cluster By.

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

Ні. DATABASE та SCHEMA є взаємозамінними ключовими словами в HiveQL, тому CREATE SCHEMA sales та CREATE DATABASE sales створюють один і той самий об'єкт metastore. Вибір залежить виключно від стилю розробки.

У каталозі сховища даних зазвичай це /user/hive/warehouse/database_name.db на HDFS. Пункт LOCATION у CREATE DATABASE перевизначає цей шлях, а DESCRIBE DATABASE повідомляє про те, яке розташування фактично використовувалося.

STRING є звичайним вибором, оскільки він не має оголошеного обмеження та не потребує доповнення. VARCHAR допомагає, коли потрібно забезпечити певну довжину, а CHAR підходить для коротких кодів фіксованої ширини, таких як абревіатури країн.

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

Звичайна ЧАСОВА ПОЗНАЧКА (TIMESTAMP) не залежить від часового поясу та зчитується назад точно так, як записана. Hive 3.1 додав ЧАСОВУ ПОЗНАЧКУ З МІСЦЕВИМ ЧАСОВИМ ПОЯСОМ (TIMESTAMP WITH LOCAL TIME ZONE), яка нормалізує значення до UTC під час запису та перетворює його під час читання.

Так. STRUCT може знаходитися всередині ARRAY, а значення MAP саме може бути STRUCT, тому ARRAY > дійсний у ВуликГлибоке вкладення ускладнює роздільники, тому робіть його неглибоким.

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

Copilot створює оператори CREATE TABLE та CREATE DATABASE з короткого коментаря, а помічники агентів можуть конвертувати файл-зразок у схему. Завжди перевіряйте шкалу DECIMAL та роздільники перед виконанням обробки результату.

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