Создание таблиц в Hive: внутренние операции, изменение и удаление с примерами.

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

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

  • 🧱 СОЗДАТЬ ТАБЛИЦУ: Одно из утверждений определяет столбцы, формат строк и, при необходимости, место хранения таблицы Hive.
  • 🏷️ ИЗМЕНИТЬ ТАБЛИЦУ: Команда RENAME изменяет имя таблицы, а команды ADD COLUMNS или CHANGE COLUMN изменяют схему без перезагрузки данных.
  • 🇧🇷 Удалить таблицу: Падениеping Удаление внутренней таблицы приводит к удалению как схемы, так и данных, тогда как удаление таблицы (drop) приводит к удалению как схемы, так и данных.ping Внешняя таблица удаляет только метаданные.
  • 🔒 Внутренние ресурсы находятся в собственности: Внутренняя или управляемая таблица находится в каталоге хранилища данных, и Hive контролирует весь ее жизненный цикл.
  • 🔗 Внешняя ссылка: Внешняя таблица указывает на файлы, которые также считываются другими инструментами, поэтому эти файлы сохраняются после удаления.
  • 🔎 Проверьте тип: Функция DESCRIBE FORMATTED выводит значения MANAGED_TABLE или EXTERNAL_TABLE, что исключает любые догадки перед удалением.

Примеры команд создания, изменения и удаления таблиц в Hive.

Операции с таблицами, такие как создание, изменение и удаление.ping В этом пошаговом руководстве можно рассмотреть работу с таблицами Hive. Каждая операция сначала показана в режиме реального времени, а затем в виде многократно используемого оператора.

Как создать, изменить и удалить таблицу в Hive

На снимке экрана ниже мы создаем таблицу со столбцами и меняем имя таблицы.

  1. Создание таблицы guru_sample с двумя столбцами, названия которых: “empid” и “empname”.
  2. Отображение таблиц, присутствующих в базе данных guru99.
  3. guru_sample отображается в таблицах
  4. Изменение таблицы “guru_sample” на “guru_sampleNew”
  5. Повторюсь, при выполнении команды «show» отобразится новое имя guru_sampleNew.

Приведенная ниже сессия последовательно выполняет все пять шагов. улей> Подсказка, а два вызова SHOW TABLES до и после переименования делают результат видимым.

В сессии Hive создается объект guru_sample и переименовывается в guru_sampleNew.

Падениеping таблица guru_sampleNew:

Однократное выполнение команды DROP TABLE удаляет переименованную таблицу, и Hive отвечает сообщением OK.

Падение раковины ульяping Таблица guru_sampleNew с ответом 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 управлял полным жизненным циклом данных, включая удаление

Пример фрагмента кода для внутренней таблицы

  1. Для создания внутренней таблицы
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Загрузите данные во внутреннюю таблицу
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Отображение содержимого таблицы
        Hive>select * from guruhive_internaltable;
  4. Удаление внутренней таблицы
        Hive>DROP TABLE guruhive_internaltable;

Если вы удалили таблицу guruhive_internaltable, включая её метаданные и данные, они будут удалены из Hive. Если не указана команда PURGE, файлы будут перемещены в папку корзины HDFS, а не удалены немедленно.

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

Создание, загрузка, запрос и удаление сессий Hive.ping guruhive_internaltable

В приведенном выше коде и на скриншоте мы делаем следующее:

  • Создайте внутреннюю таблицу
  • Загрузите данные во внутреннюю таблицу
  • Отображение содержимого таблицы
  • Удаление внутренней таблицы

Внешние таблицы в Hive

  • Внешняя таблица имеет слабосвязанную архитектуру. Данные будут доступны в HDFS. Таблица будет создана на основе данных из HDFS.
  • Иными словами, можно сказать, что это создание схемы на основе данных.
  • В момент паденияping При удалении таблицы будет удалена только схема, данные по-прежнему будут доступны в HDFS, как и раньше.
  • Внешние таблицы предоставляют возможность создавать несколько схем для данных, хранящихся в HDFS, вместо удаления данных каждый раз при обновлении схемы.
  • Начиная с версии Hive 4.0.0, установка свойства таблицы external.table.purge в значение true приводит к тому, что команда DROP также удаляет данные.

Когда выбирать внешнюю таблицу?

  • Если данные для обработки доступны в HDFS.
  • Полезно, когда файлы используются за пределами Hive.

Пример фрагмента кода для внешней таблицы

  1. Создать внешнюю таблицу
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. Если местоположение не указано при создании таблицы, данные можно загрузить вручную.
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. Отображение содержимого таблицы
      Hive>select * from guruhive_external;
  4. Чтобы удалить внешнюю таблицу
      Hive>DROP TABLE guruhive_external;

На следующем скриншоте мы можем увидеть результат. Обратите внимание, что команда `drop` в конце удаляет только схему — файл по пути LOCATION остается нетронутым.

Создание, загрузка, запрос и удаление сессий Hive.ping guruhive_external

В приведенном выше коде мы выполняем следующие действия.

  • Создайте внешнюю таблицу
  • Загрузите данные во внешнюю таблицу
  • Отображение содержимого таблицы
  • Падение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, прежде чем будет выполнено удаление.

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

Выполните команду DESCRIBE FORMATTED table_name. В строке Table Type отображается либо MANAGED_TABLE, либо EXTERNAL_TABLE. Проверка перед удалением — самый дешевый способ избежать удаления данных, которые продолжают считывать другие задания.

Да. Команда ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') меняет тип в метаданных, а FALSE возвращает его обратно. Файлы данных остаются на своих местах, поэтому перезагрузка не требуется.

Обычно нет, удаляется только запись в метаданных. Однако, начиная с Hive 4.0.0, данные внешней таблицы, у которой свойство external.table.purge установлено в значение true, также удаляются командой DROP, поэтому сначала проверьте свойства.

Теперь обычная команда CREATE TABLE по умолчанию создает управляемую транзакционную таблицу ORC, а не простую текстовую таблицу. Добавление ключевого слова EXTERNAL позволяет сохранить прежнее поведение, не соответствующее принципам ACID, в кластере Hive 3.

Команда TRUNCATE удаляет все строки, но сохраняет схему, и работает только с управляемыми таблицами. Команда DROP также удаляет схему. TRUNCATE — более безопасный выбор, когда определение таблицы должно сохраниться после перезагрузки.

Нет. Hive преобразует идентификаторы в нижний регистр в метаданных, поэтому GURU_SAMPLE и guru_sample ссылаются на одну и ту же таблицу. Строковые значения внутри данных остаются чувствительными к регистру, поэтому сравнение WHERE всё ещё может пропустить строки.

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

Copilot завершает выполнение операторов CREATE, ALTER и DROP на основе короткого комментария, а агентские помощники могут создать целый скрипт миграции. RevПроверьте ключевое слово EXTERNAL и любой параметр PURGE, поскольку неверное предположение в этом случае приведет к удалению реальных данных.

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