Типи даних Hive: як створювати та видаляти бази даних у Hive
⚡ Розумний підсумок
Типи даних Hive визначають, що може містити кожен стовпець таблиці, а команди CREATE DATABASE та DROP DATABASE налаштовують або видаляють простір імен, у якому знаходяться ці таблиці в метасховищі 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, яка перераховує всі бази даних у кластері.
З наведеного вище скріншоту видно, що ми робимо дві речі:
- Створення бази даних “guru99” у Hive
- Відображення існуючих баз даних за допомогою команди «show»
На тому ж екрані база даних «guru99» відображається в кінці виконання команди show, що означає, що база даних «guru99» успішно створена.
Крок 2) Перетягніть базу даних у Hive
Для падінняping Для бази даних в оболонці Hive нам потрібно використовувати команду «drop», як показано в синтаксисі нижче:
Синтаксис:
Drop database <DatabaseName>
Приклад: Видалити базу даних guru99
На наступному скріншоті оператор drop виконується першим, а наступна команда show більше не відображає базу даних.
На наведеному вище скріншоті ми робимо дві речі:
- Ми падаємоping база даних 'guru99' з Hive
- Перевірка того ж за допомогою команди «показати»
На тому ж екрані, після перевірки баз даних за допомогою команди 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.


