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

⚡ Умное резюме

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

  • 🔢 Числовые типы: Типы TINYINT, BIGINT и DECIMAL (precision, scale) охватывают целые числа, в то время как 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

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

Тип Выделение памяти
ТИНИИНТ 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, отображающая список всех баз данных в кластере.

Hive shell создает базу данных guru99 и выводит список баз данных с помощью команды show.

На скриншоте выше мы делаем две вещи:

  1. Создание базы данных «guru99» в Hive
  2. Отображение существующих баз данных с помощью команды «show».

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

Шаг 2) Удалите базу данных в Hive.

Для паденияping Для работы с базой данных в оболочке Hive необходимо использовать команду «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 выполняют одно и то же действие. Остальные команды завершают повседневную работу с пространством имен.

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.

Часто задаваемые вопросы (FAQ)

Нет. В HiveQL ключевые слова DATABASE и SCHEMA взаимозаменяемы, поэтому команды 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 WITH LOCAL TIME ZONE, которая нормализует значение до UTC при записи и преобразует его при чтении.

Да. Структура может находиться внутри массива, а значение MAP само по себе может быть структурой, поэтому массив > действителен в HiveГлубокая вложенность усложняет работу с разделителями, поэтому лучше использовать неглубокую вложенность.

Да. Инструменты профилирования данных анализируют кардинальность, частоту нулевых значений и диапазоны значений, а затем предлагают наиболее узкий рабочий тип и формат файла. Рассматривайте это предложение как черновик, поскольку модель не может предвидеть будущие рабочие нагрузки.

Copilot формирует операторы CREATE TABLE и CREATE DATABASE на основе короткого комментария, а агенты-помощники могут преобразовать образец файла в схему. Всегда проверяйте шкалу DECIMAL и разделители перед выполнением результата.

Подведем итог этой публикации следующим образом: