Створення таблиці у кущі: внутрішня, зміна та видалення з прикладами

⚡ Розумний підсумок

Створення, зміна та видаленняping Таблиці в Apache Hive використовують звичний DDL у стилі SQL, але результат залежить від того, чи є таблиця внутрішньою, яка належить Hive, чи зовнішньою, яка просто описує файли.

  • 🧱 СТВОРИТИ ТАБЛИЦЮ: Одна інструкція визначає стовпці, формат рядків і, за бажанням, місце зберігання таблиці Hive.
  • 🏷️ ЗМІНИТИ ТАБЛИЦЮ: RENAME змінює назву таблиці, а ADD COLUMNS або CHANGE COLUMN редагує схему без перезавантаження даних.
  • 🗑️ ВИХІДНА ТАБЛИЦЯ: Падінняping внутрішня таблиця видаляє як схему, так і дані, тоді як dropping зовнішня таблиця видаляє лише метадані.
  • 🔒 Внутрішній належить: Внутрішня або керована таблиця знаходиться в каталозі сховища, а Hive контролює повний її життєвий цикл.
  • 🔗 Зовнішнє посилання: Зовнішня таблиця вказує на файли, які також читаються іншими інструментами, тому ці файли зберігаються після видалення.
  • 🔎 Перевірте тип: DESCRIBE FORMATTED повідомляє про MANAGED_TABLE або EXTERN_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

Синтаксис та загальні речення Hive CREATE TABLE

У наведеному вище прикладі використовується найкоротша можлива форма. Документований оператор приймає кілька необов'язкових речень, і кожен з них визначає щось, що приклад залишає за замовчуванням.

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

Пов'язана форма, СТВОРИТИ ТАБЛИЦЮ new_table ПОДІБНО існуючій_таблиці, копіює схему без копіювання жодних рядків. Структурні речення, такі як PARTITIONED BY та CLUSTERED BY, детально розглядаються в посібнику з Перегородки та відра вуликів.

Типи таблиць і їх використання

Що стосується таблиць, то це так само, як ми створюємо їх у традиційних реляційних базах даних. Такі функції, як фільтрація та об'єднання, можна виконувати над таблицями.

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, а не видаляються негайно.

На наступному скріншоті ми можемо спостерігати вивід усіх чотирьох операторів за один сеанс, що завершується успішним видаленням.

Створення, завантаження, запити та видалення сеансу hiveping 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;

На наступному скріншоті ми можемо спостерігати результат. Зверніть увагу, що перетягування в кінці видаляє лише схему – файл у шляху LOCATION залишається недоторканим.

Створення, завантаження, запити та видалення сеансу hiveping guruhive_external

У наведеному вище коді ми робимо наступні речі

  • Створіть зовнішню таблицю
  • Завантажте дані у зовнішню таблицю
  • Відображення вмісту таблиці
  • Падінняping зовнішня таблиця

Різниця між внутрішніми та зовнішніми таблицями

особливість Внутрішній Зовнішній
схема Дані на схемі Схема на даних
Місце зберігання /користувач/вулик/склад Розташування HDFS, задане LOCATION
Доступність даних У локальній файловій системі У HDFS
Вплив ПАДІННЯ Видаляє схему та дані Видаляє лише схему, якщо тільки external.table.purge не має значення true
Підтримка TRUNCATE Підтриманий Не підтримується
Транзакції ACID Підтриманий Не підтримується

Команда Документація Apache Hive Правило чітко формулюється: Hive припускає, що він володіє даними для керованих таблиць, і припускає, що він не володіє даними для зовнішніх таблиць, і кожна вищезазначена відмінність випливає з цього єдиного припущення.

Довідник команд ALTER TABLE та DROP TABLE

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

Заява Мета
ALTER TABLE назва_таблиці ПЕРЕЙМЕНУВАТИ НА нове_назва; Перейменовує таблицю; для керованої таблиці це також переміщує її каталог HDFS
ALTER TABLE назва_таблиці ДОДАТИ СТОВЦІ (назва_стовпця тип_даних); Додає один або декілька стовпців до кінця схеми
ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; Перейменовує стовпець або змінює його тип
ALTER TABLE назва_таблиці ЗАМІНИТИ СТОВЦІ (…); Замінює весь список стовпців новим
ALTER TABLE table_name SET TBLPROPERTIES ('EXTERN'='TRUE'); Перетворює керовану таблицю на зовнішню, а FALSE інвертує її значення
ВИДАЛИТИ ТАБЛИЦЮ [ЯКЩО ІСНУЄ] назва_таблиці [ОЧИСТИТИ]; Видаляє таблицю; PURGE пропускає папку «Кошик», тому дані неможливо відновити.
TRUNCATE [ТАБЛИЦЯ] назва_таблиці; Видаляє всі рядки, але зберігає схему; лише керовані таблиці

У будь-який скрипт варто вбудувати два запобіжні заходи. IF EXISTS запобігає збою видалення на таблицю, яку вже було видалено, а DESCRIBE FORMATTED підтверджує, чи є ціль MANAGED_TABLE чи EXTERNAL_TABLE перед виконанням видалення.

Поширені запитання

Виконайте команду DESCRIBE FORMATTED table_name. У рядку «Тип таблиці» буде вказано значення 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 все ще може пропускати рядки.

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

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

Підсумуйте цей пост за допомогою: