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

Типы данных являются очень важными элементами в языке запросов Hive и моделировании данных. Для определения типов столбцов таблицы необходимо знать типы данных и их использование.
Ниже приведён краткий обзор некоторых типов данных, присутствующих в Hive:
- Числовые типы
- Типы строк
- Типы даты/времени
- Сложные типы
Типы данных в Hive
Каждый столбец Hive объявляется с одним из перечисленных ниже типов. Первыми идут примитивные типы, за ними следуют сложные типы, которые могут содержать более одного значения в одном столбце.
Числовые типы данных Hive
Числовые столбцы могут содержать от одного до восьми байтов данных, поэтому выбор наименьшего типа, соответствующего значениям, позволяет снизить как затраты на хранение, так и на сканирование.
| Тип | Выделение памяти |
|---|---|
| ТИНИИНТ | 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) |
| FLOAT | 4-байтовое число с плавающей запятой одинарной точности |
| ДВОЙНОЙ | 8-байтовое число с плавающей запятой двойной точности |
| ДЕСЯТИЧНЫЙ | В этом типе можно задать точность и масштаб как DECIMAL(precision, scale). Если они опущены, Hive использует DECIMAL(10,0). |
Типы данных Hive String
Символьные столбцы бывают трех типов, и разница между ними заключается в том, устанавливает ли Hive заданную длину.
| Тип | Длина |
|---|---|
| CHAR | Фиксированная длина, до 255 символов. Более короткие значения дополняются пробелами. |
| ВАРЧАР | От 1 до 65 535 символов. Более длинное значение будет незаметно усечено. |
| STRING | Здесь мы можем задать длину (без ограничений). |
Типы данных даты и времени Hive
Столбцы с временными данными хранятся без учета смещения часового пояса, что стоит помнить перед сравнением значений, записанных разными кластерами.
| Тип | Применение |
|---|---|
| Timestamp | Поддерживает традиционные Юникс временная метка с дополнительной точностью до наносекунды |
| Время | Формат: ГГГГ-ММ-ДД. Диапазон значений, поддерживаемых для типа Date, составляет от 0000-01-01 до 9999-12-31, в зависимости от поддержки примитива. Java типичная дата |
Различные типы данных Hive
Еще два примитива находятся за пределами семейств числовых, строковых и датовых данных, но регулярно встречаются в реальных схемах.
| Тип | Применение |
|---|---|
| БУЛЕВЫ | Содержит истинные или ложные данные. |
| BINARY | Хранит массив байтов, который предотвращает попадание необработанного содержимого в столбец типа STRING. |
Сложные типы данных Hive
Сложные типы данных вкладывают значения в один столбец, что устраняет необходимость в дополнительном соединении, которое потребовалось бы в реляционной структуре.
| Тип | Применение |
|---|---|
| Массивы | МНОЖЕСТВО Отрицательные значения и непостоянные выражения не допускаются. |
| Карты | КАРТА Отрицательные значения и непостоянные выражения не допускаются. |
| Структуры | СТРУКТУРА |
| Союз | ПРОФСОЮЗНЫЙ ТИП |
Пример сложных типов данных 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;
Здесь необходимы три отдельных разделителя: один между столбцами, второй между элементами массива или структуры и третий между ключом MAP и его значением. После создания таблицы каждый сложный столбец считывается с помощью собственного метода доступа.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
В таблице ниже приведена сводная информация о том, к какому типу относится тот или иной аксессор.
| Тип | Как считывается значение |
|---|---|
| МНОЖЕСТВО | Индекс с нулевой базой, например, навыки[0] |
| MAP | Ключ для поиска заключен в квадратные скобки, например, deductions['tax'] |
| СТРУКТУРА | Точечная запись в имени поля, например, address.city |
| ПРОФСОЮЗНЫЙ ТИП | Используется редко, поскольку поддержка запросов к нему остается неполной. |
Сложные типы могут быть вложенными, поэтому ARRAY > — это допустимое объявление столбца. После определения структуры столбцов сами таблицы создаются с помощью операторов, описанных в Создание, изменение и удаление таблиц в Hive..
Как создавать и удалять базы данных в Hive
В Hive база данных — это просто пространство имен, объединяющее таблицы, поэтому это первый объект, который необходимо создать перед началом любой работы с таблицами. Ниже описаны шаги по созданию и удалению баз данных в Hive.
Шаг 1) Создайте базу данных в Hive.
Для создания базы данных в оболочке Hive необходимо использовать команду, представленную в синтаксисе ниже:
Синтаксис:
Create database <DatabaseName>
Пример: Создать базу данных «guru99»
На скриншоте ниже показана команда создания базы данных, за которой следует команда show, отображающая список всех баз данных в кластере.
На скриншоте выше мы делаем две вещи:
- Создание базы данных «guru99» в Hive
- Отображение существующих баз данных с помощью команды «show».
На том же экране в конце выполнения команды show отображается база данных «guru99», что означает успешное создание базы данных «guru99».
Шаг 2) Удалите базу данных в Hive.
Для паденияping Для работы с базой данных в оболочке Hive необходимо использовать команду «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 выполняют одно и то же действие. Остальные команды завершают повседневную работу с пространством имен.
| Command | Что она делает |
|---|---|
| ПОКАЗАТЬ БАЗЫ ДАННЫХ; | Отображает список всех баз данных, зарегистрированных в метахранилище. |
| ИСПОЛЬЗОВАТЬ имя_базы_данных; | Устанавливает текущую базу данных таким образом, чтобы имена таблиц не имели префикса. |
| DESCRIBE DATABASE database_name; | Содержит комментарий, местоположение в HDFS и данные владельца. |
| DESCRIBE DATABASE EXTENDED database_name; | Добавляет пары ключ-значение из DBPROPERTIES к полученным данным. |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | Добавляет или заменяет свойства метаданных. |
| ALTER DATABASE database_name SET OWNER USER user_name; | Передаёт права собственности другому пользователю или роли. |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | Изменяет путь, используемый таблицами, созданными после этого. |
Стоит запомнить два параметра по умолчанию. Без условия LOCATION файлы находятся в каталоге хранилища, обычно /user/hive/warehouse/database_name.db, а без условия IF EXISTS удаление файла с отсутствующим именем вызовет ошибку вместо того, чтобы пройти проверку без проблем. Оба параметра хранятся в файле конфигурации. Хранилище метаданных улья.
Преобразование типов данных в Hive и распространенные ошибки
Типы не всегда используются точно так, как заявлено. Hive автоматически расширяет значение, если нельзя потерять никакой информации, а все остальное оставляет на явное преобразование.
- Неявное расширение происходит по цепочке TINYINT — SMALLINT — INT — BIGINT — FLOAT — DOUBLE, при этом строка, содержащая цифры, преобразуется в тип DOUBLE.
- Сужение диапазона значений никогда не происходит само по себе, поэтому для присвоения значения типа DOUBLE столбцу типа INT требуется текстовое преобразование.
- Функция CAST выполняет преобразование, и в случае невозможности преобразования значения она возвращает NULL, а не ошибку.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Приведенные ниже ошибки объясняют большинство неожиданностей, с которыми сталкиваются новички при создании своей первой схемы.
| Симптом | Причина и устранение |
|---|---|
| Удаление таблицы не удается, пока база данных еще содержит необходимые таблицы. | RESTRICT — это значение по умолчанию. Добавьте CASCADE, чтобы удалить таблицы вместе с ним. |
| Длинная веревка приходит укороченной. | Тип данных VARCHAR автоматически обрезается после достижения заявленной длины. Используйте тип данных STRING, если ограничение не требуется. |
| После преобразования столбец отображается как NULL. | Функция CAST не смогла обработать значение. Проверьте исходные данные, прежде чем расширять тип. |
| Стоимость валюты теряет свои пайсы или центы. | Функция DECIMAL без аргументов означает DECIMAL(10,0). Укажите масштаб явно. |
| Две даты, выглядящие одинаково, никогда не совпадают. | Строковая дата и столбец типа DATE — это разные типы данных. Перед сравнением отбросьте одну сторону. |
После того как типы данных будут корректно распознаны, следующим шагом станет загрузка и запрос самих данных, что описано в соответствующем разделе. Запросы Hive с сортировкой, группировкой и Cluster By.


