Створення таблиці у кущі: внутрішня, зміна та видалення з прикладами
⚡ Розумний підсумок
Створення, зміна та видалення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.
Синтаксис та загальні речення 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 керував повним життєвим циклом даних, включаючи видалення
Приклад фрагмента коду для внутрішньої таблиці
- Щоб створити внутрішню таблицю
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;
На наступному скріншоті ми можемо спостерігати результат. Зверніть увагу, що перетягування в кінці видаляє лише схему – файл у шляху LOCATION залишається недоторканим.
У наведеному вище коді ми робимо наступні речі
- Створіть зовнішню таблицю
- Завантажте дані у зовнішню таблицю
- Відображення вмісту таблиці
- Падіння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 перед виконанням видалення.




