Типове данни в Hive: Как да създавате и премахвате бази данни в Hive
⚡ Умно обобщение
Типовете данни на Hive определят какво може да съдържа всяка колона от таблицата, а командите CREATE DATABASE и DROP DATABASE настройват или премахват пространството от имена, в което се намират тези таблици в метахранилището на Hive.

Типовете данни са много важни елементи в езика за заявки на Hive и моделирането на данни. За да дефинираме типовете колони в таблицата, трябва да знаем за типовете данни и тяхното използване.
Следва кратък преглед на някои типове данни, налични в Hive:
- Числови типове
- Типове низове
- Типове дата/час
- Сложни типове
Типове данни в Hive
Всяка колона на Hive е декларирана с един от типовете по-долу. Примитивните семейства са първи, следвани от сложните типове, които съдържат повече от една стойност в една колона.
Числови типове данни на кошера
Числовите колони варират от един байт до осем байта, така че избирането на най-малкия тип, който отговаря на стойностите, намалява както разходите за съхранение, така и разходите за сканиране.
| Тип | Разпределение на паметта |
|---|---|
| TINYINT | 1-байтово цяло число със знак (-128 до 127) |
| СМАЛИНТ | 2-байтово цяло число със знак (-32,768 до 32,767) |
| INT | 4-байтово цяло число със знак (-2,147,483,648 до 2,147,483,647) |
| BIGINT | 8-байтово цяло число със знак (-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807) |
| ПЛАВА | 4-байтово число с плаваща запетая с единична точност |
| DOUBLE | 8-байтово число с плаваща запетая с двойна точност |
| ДЕЦИМАЛЕН | Можем да дефинираме прецизност и мащаб в този тип като DECIMAL(precision, scale). Когато са пропуснати, Hive използва DECIMAL(10,0) |
Типове данни за низове на Hive
Колоните със символи се предлагат в три форми, а разликата е дали Hive налага декларирана дължина.
| Тип | Дължина |
|---|---|
| CHAR | Фиксирана дължина, до 255 знака. По-късите стойности се допълват с интервали. |
| ВАРЧАР | От 1 до 65 535 знака. По-дългата стойност се отрязва безшумно. |
| STRING | Можем да дефинираме дължина тук (без ограничение) |
Типове данни за дата/час на кошера
Временните колони се съхраняват без отместване спрямо часовата зона, което е добре да се помни, преди да се сравняват стойности, записани от различни клъстери.
| Тип | употреба |
|---|---|
| Timestamp | Поддържа традиционните Unix клеймо за време с опционална наносекунда точност |
| Дата | Във формат ГГГГ-ММ-ДД. Диапазонът от поддържани стойности за типа Дата е от 0000-01-01 до 9999-12-31, в зависимост от поддръжката от примитива. Java типична дата |
Разни типове данни за кошера
Два други примитива се намират извън числовите, низовите и датните семейства, но се появяват редовно в реални схеми.
| Тип | употреба |
|---|---|
| БОЛЕВО | Съхранява вярно или невярно |
| двоен | Съхранява масив от байтове, което предпазва суровото съдържание от колона STRING |
Сложни типове данни на 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] |
| КАРТА | Търсене по ключови думи в квадратни скоби, като например удръжки['данък'] |
| СТРУКТУРА | Точкова нотация в името на полето, например адрес.град |
| ТИП НА СЪЮЗА | Рядко се използва, тъй като поддръжката на заявките за него е останала непълна |
Сложните типове могат да бъдат вложени, така че ARRAY > е валидна декларация на колона. След като оформлението на колоните е установено, самите таблици се изграждат с операторите, обхванати в Създаване, промяна и премахване на таблица в Hive.
Как да създавате и премахвате бази данни в Hive
Базата данни в Hive е просто пространство от имена, което групира таблици, така че е първият обект, който се създава, преди да започне каквато и да е работа с таблици. Следват стъпките за това как да създавате и премахвате бази данни в Hive.
Стъпка 1) Създаване на база данни в Hive
За да създадем база данни в Hive shell, трябва да използваме командата, както е показано в синтаксиса по-долу:
Синтаксис:
Create database <DatabaseName>
Пример: Създаване на база данни „guru99“
Екранната снимка по-долу показва командата create, последвана от командата show, изброяваща всички бази данни в клъстера.
От горната екранна снимка правим две неща:
- Създаване на база данни „guru99“ в Hive
- Показване на съществуващи бази данни с помощта на командата „show“
На същия екран, базата данни „guru99“ се показва в края, когато изпълним командата show, което означава, че базата данни „guru99“ е създадена успешно.
Стъпка 2) Преместване на базата данни в Hive
За капкаping база данни в Hive shell, трябва да използваме командата „drop“, както е показано в синтаксиса по-долу:
Синтаксис:
Drop database <DatabaseName>
Пример: Премахване на база данни guru99
На следващата екранна снимка командата drop се изпълнява първа, а командата show, която следва, вече не изброява базата данни.
На горната екранна снимка правим две неща:
- Ние сме капкаping база данни „guru99“ от Hive
- Кръстосана проверка с командата „show“
На същия екран, след проверка на базите данни с командата 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 правят абсолютно едно и също нещо. Останалите команди допълват ежедневната работа с пространство от имена.
| Команда | Какво го прави |
|---|---|
| ПОКАЖЕТЕ БАЗА ДАННИ; | Изброява всяка база данни, регистрирана в метахранилището |
| ИЗПОЛЗВАЙТЕ базата_име; | Задава текущата база данни така, че имената на таблиците да не се нуждаят от префикс |
| DESCRIBE DATABASE име_на_база_данни; | Докладва коментара, местоположението на HDFS и собственика |
| DESCRIBE DATABASE EXTENDED име_на_база_данни; | Добавя двойките ключ-стойност DBPROPERTIES към този изход |
| ALTER DATABASE име_на_база_данни ЗАДАВАНЕ НА DBPROPERTIES (…); | Добавя или замества свойства на метаданни |
| ALTER DATABASE име_на_база_данни SET OWNER USER потребителско_име; | Прехвърля собствеността на друг потребител или роля |
| ПРОМЯНА НА БАЗАТА ДАННИ име_на_база_данни ЗАДАВАНЕ НА МЕСТОПОЛОЖЕНИЕ път_на_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.


