Типове данни в Hive: Как да създавате и премахвате бази данни в Hive

⚡ Умно обобщение

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

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

Типове данни в 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)
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 shell и изброяване на бази данни с помощта на show

От горната екранна снимка правим две неща:

  1. Създаване на база данни „guru99“ в Hive
  2. Показване на съществуващи бази данни с помощта на командата „show“

На същия екран, базата данни „guru99“ се показва в края, когато изпълним командата show, което означава, че базата данни „guru99“ е създадена успешно.

Стъпка 2) Преместване на базата данни в Hive

За капкаping база данни в Hive shell, трябва да използваме командата „drop“, както е показано в синтаксиса по-долу:

Синтаксис:

Drop database <DatabaseName>

Пример: Премахване на база данни guru99

На следващата екранна снимка командата drop се изпълнява първа, а командата show, която следва, вече не изброява базата данни.

Падане на черупка от кошерping базата данни на guru99 и потвърждаване на премахването с show

На горната екранна снимка правим две неща:

  1. Ние сме капкаping база данни „guru99“ от Hive
  2. Кръстосана проверка с командата „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.

Въпроси и Отговори

Не. DATABASE и SCHEMA са взаимозаменяеми ключови думи в HiveQL, така че CREATE SCHEMA sales и CREATE DATABASE sales създават един и същ метастор обект. Изборът е изцяло въпрос на стил на компанията.

В директорията на хранилището, обикновено /user/hive/warehouse/database_name.db на HDFS. Клаузата LOCATION в CREATE DATABASE отменя този път и DESCRIBE DATABASE докладва кое местоположение е било действително използвано.

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

DOUBLE е двоична функция с плаваща запетая, така че повтарящите се суми се отклоняват с части от цент. DECIMAL съхранява точни стойности с определена точност и мащаб, което позволява финансовите суми да бъдат възпроизводими в различните цикли.

Обикновеният TIMESTAMP не е свързан с часова зона и се чете обратно точно както е записан. Hive 3.1 добави TIMESTAMP С МЕСТНА ЧАСОВА ЗОНА, който нормализира стойността към UTC при запис и я преобразува при четене.

Да. STRUCT може да се намира вътре в ARRAY, а MAP стойността може сама по себе си да е STRUCT, така че ARRAY > е валидно в КошерДълбокото влагане усложнява разделителите, затова го дръжте плитко.

Да. Инструментите за профилиране на данни извличат примерни данни за кардиналност, нулеви честоти и диапазони от стойности, след което предлагат най-тесния работещ тип и файлов формат. Третирайте предложението като чернова, защото моделът не може да вижда бъдещи натоварвания.

Copilot създава CREATE TABLE и CREATE DATABASE оператори от кратък коментар, а агентските асистенти могат да конвертират примерен файл в схема. Винаги проверявайте DECIMAL скалата и разделителните клаузи, преди да изпълните резултата.

Обобщете тази публикация с: