Создание таблиц в Hive: внутренние операции, изменение и удаление с примерами.
⚡ Умное резюме
Создание, изменение и удалениеping В Apache Hive для работы с таблицами используется привычный DDL-код в стиле SQL, но результат зависит от того, является ли таблица внутренней (принадлежащей Hive) или внешней (описывающей только файлы).

Операции с таблицами, такие как создание, изменение и удаление.ping В этом пошаговом руководстве можно рассмотреть работу с таблицами Hive. Каждая операция сначала показана в режиме реального времени, а затем в виде многократно используемого оператора.
Как создать, изменить и удалить таблицу в Hive
На снимке экрана ниже мы создаем таблицу со столбцами и меняем имя таблицы.
- Создание таблицы guru_sample с двумя столбцами, названия которых: “empid” и “empname”.
- Отображение таблиц, присутствующих в базе данных guru99.
- guru_sample отображается в таблицах
- Изменение таблицы “guru_sample” на “guru_sampleNew”
- Повторюсь, при выполнении команды «show» отобразится новое имя guru_sampleNew.
Приведенная ниже сессия последовательно выполняет все пять шагов. улей> Подсказка, а два вызова SHOW TABLES до и после переименования делают результат видимым.
Падениеping таблица guru_sampleNew:
Однократное выполнение команды DROP TABLE удаляет переименованную таблицу, и Hive отвечает сообщением OK.
Синтаксис и общие предложения команды CREATE TABLE в Hive
В приведенном выше примере используется максимально короткая форма. Документированное выражение допускает несколько необязательных условий, и каждое из них определяет то, что в примере остается по умолчанию.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| пункт | Что он контролирует |
|---|---|
| ВНЕШНИЙ ВИД ЗДАНИЯ | Создает внешнюю таблицу, поэтому команда DROP оставляет файлы данных на месте. |
| ВРЕМЕННЫЙ | Создает таблицу, ограниченную областью действия сессии, которая исчезает по завершении сессии. |
| ЕСЛИ НЕ СУЩЕСТВУЕТ | Подавляет ошибку, если таблица с таким именем уже существует. |
| РАЗДЕЛЕНО ПО | Разделяет таблицу на отдельные директории для каждого значения ключа. |
| Сгруппировано… в n ведрах | Хэширование строк в фиксированное количество файлов |
| ФОРМАТ СТРОКИ / ХРАНИТСЯ КАК | Задает разделитель (SerDe) и формат файла, например, TEXTFILE, ORC или Parquet. |
| Местонахождения: | Указывает таблице конкретный путь к HDFS вместо пути по умолчанию, используемого хранилищем данных. |
| TBLPROPERTIES | Прикрепляет пары ключ-значение метаданных, включая external.table.purge. |
Родственная форма, CREATE TABLE new_table LIKE existing_tableКопирует схему, не копируя при этом ни одной строки. Структурные операторы, такие как PARTITIONED BY и CLUSTERED BY, подробно описаны в руководстве. Перегородки и контейнеры для ульев.
Типы таблиц и их использование
Что касается таблиц, то их создание аналогично тому, как это делается в традиционных реляционных базах данных. К таблицам можно применять такие функции, как фильтрация и объединения.
Hive работает с двумя типами табличных структур: внутренними и внешними, в зависимости от загрузки и структуры схемы. HiveЭтот выбор не является чисто формальным: он определяет, кому принадлежат файлы данных и что с ними происходит при удалении таблицы.
Внутренние таблицы в Hive
- Внутренние таблицы по своей природе тесно связаны между собой. В этом типе таблиц сначала необходимо создать таблицу, а затем загрузить в нее данные.
- Это можно назвать данными по схеме.
- По каплеping Из этой таблицы будут удалены как данные, так и схема.
- Место хранения этой таблицы будет /user/hive/warehouse.
- Внутренние таблицы также называются управляемыми таблицами, и только они поддерживают транзакции TRUNCATE, ARCHIVE, MERGE, CONCATENATE и ACID.
Когда выбирать внутреннюю таблицу?
- Если данные для обработки доступны в локальной файловой системе.
- Если мы хотим, чтобы Hive управлял полным жизненным циклом данных, включая удаление
Пример фрагмента кода для внутренней таблицы
- Для создания внутренней таблицы
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Загрузите данные во внутреннюю таблицу
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Отображение содержимого таблицы
Hive>select * from guruhive_internaltable;
- Удаление внутренней таблицы
Hive>DROP TABLE guruhive_internaltable;
Если вы удалили таблицу guruhive_internaltable, включая её метаданные и данные, они будут удалены из Hive. Если не указана команда PURGE, файлы будут перемещены в папку корзины HDFS, а не удалены немедленно.
На приведенном ниже скриншоте мы можем наблюдать вывод всех четырех операторов в одной сессии, завершающийся успешным сбросом.
В приведенном выше коде и на скриншоте мы делаем следующее:
- Создайте внутреннюю таблицу
- Загрузите данные во внутреннюю таблицу
- Отображение содержимого таблицы
- Удаление внутренней таблицы
Внешние таблицы в Hive
- Внешняя таблица имеет слабосвязанную архитектуру. Данные будут доступны в HDFS. Таблица будет создана на основе данных из HDFS.
- Иными словами, можно сказать, что это создание схемы на основе данных.
- В момент паденияping При удалении таблицы будет удалена только схема, данные по-прежнему будут доступны в HDFS, как и раньше.
- Внешние таблицы предоставляют возможность создавать несколько схем для данных, хранящихся в HDFS, вместо удаления данных каждый раз при обновлении схемы.
- Начиная с версии Hive 4.0.0, установка свойства таблицы external.table.purge в значение true приводит к тому, что команда DROP также удаляет данные.
Когда выбирать внешнюю таблицу?
- Если данные для обработки доступны в HDFS.
- Полезно, когда файлы используются за пределами Hive.
Пример фрагмента кода для внешней таблицы
- Создать внешнюю таблицу
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Если местоположение не указано при создании таблицы, данные можно загрузить вручную.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Отображение содержимого таблицы
Hive>select * from guruhive_external;
- Чтобы удалить внешнюю таблицу
Hive>DROP TABLE guruhive_external;
На следующем скриншоте мы можем увидеть результат. Обратите внимание, что команда `drop` в конце удаляет только схему — файл по пути LOCATION остается нетронутым.
В приведенном выше коде мы выполняем следующие действия.
- Создайте внешнюю таблицу
- Загрузите данные во внешнюю таблицу
- Отображение содержимого таблицы
- Падениеping внешний стол
Разница между внутренними и внешними таблицами.
| Характеристика | внутренний | Внешний |
|---|---|---|
| Схема | Данные о схеме | Схема данных |
| Место хранения | /пользователь/улей/склад | Местоположение HDFS указано параметром LOCATION |
| Доступность данных | В локальной файловой системе | В HDFS |
| Влияние DROP | Удаляет схему и данные. | Удаляет только схему, если параметр external.table.purge не равен true. |
| Поддержка TRUNCATE | Поддержанный | Не поддерживается |
| ACID транзакции | Поддержанный | Не поддерживается |
Документация Apache Hive Правило сформулировано ясно: Hive предполагает, что владеет данными для управляемых таблиц, и предполагает, что не владеет ими для внешних, и все вышеперечисленные различия вытекают из этого единственного предположения.
Справочник команд ALTER TABLE и DROP TABLE
На скриншотах выше показаны только переименование и удаление. Это те операторы, которые чаще всего используются специалистами при работе с существующей таблицей.
| заявление | Цель |
|---|---|
| ALTER TABLE table_name RENAME TO new_name; | Переименовывает таблицу; для управляемой таблицы это также перемещает ее каталог в HDFS. |
| ALTER TABLE table_name ADD COLUMNS (col_name data_type); | Добавляет один или несколько столбцов в конец схемы. |
| ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; | Переименовывает столбец или изменяет его тип. |
| ALTER TABLE table_name REPLACE COLUMNS (…); | Заменяет весь список столбцов новым. |
| ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Преобразует управляемую таблицу во внешнюю, а значение FALSE приводит к обратному преобразованию. |
| DROP TABLE [IF EXISTS] table_name [PURGE]; | Удаляет таблицу; команда PURGE пропускает папку корзины, поэтому данные восстановить невозможно. |
| TRUNCATE [TABLE] table_name; | Удаляет все строки, но сохраняет схему; только для управляемых таблиц. |
В любой скрипт стоит включить две меры предосторожности. IF EXISTS предотвращает сбой при удалении таблицы, которая уже была удалена, а DESCRIBE FORMATTED подтверждает, является ли целевая таблица MANAGED_TABLE или EXTERNAL_TABLE, прежде чем будет выполнено удаление.




