Създаване на таблица в кошера: Вътрешно, Промяна и премахване с примери
⚡ Умно обобщение
Създаване, промяна и премахване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 ПО ИЗГЛЕД НА existing_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 |
| Ефект на DROP | Изтрива схема и данни | Изтрива само схемата, освен ако external.table.purge е true |
| Поддръжка на TRUNCATE | Подкрепа | Не се поддържа |
| ACID транзакции | Подкрепа | Не се поддържа |
- Документация за Apache Hive Правилото е ясно формулирано: Hive приема, че притежава данните за управляваните таблици и приема, че не притежава данните за външните, и всяка разлика по-горе следва от това единствено предположение.
Справочник на командите ALTER TABLE и DROP TABLE
Снимките на екрана по-горе показват само преименуване и пускане. Това са операторите, към които практикуващият посяга най-често на съществуваща маса.
| Изявление | Цел |
|---|---|
| ПРОМЕНИ ТАБЛИЦАТА име_на_таблица ПРЕИМЕНУВАЙ В ново_име; | Преименува таблицата; за управлявана таблица това също премества нейната HDFS директория |
| ALTER TABLE име_на_таблица ДОБАВИ КОЛОНИ (име_на_колона тип_данни); | Добавя една или повече колони в края на схемата |
| ПРОМЯНА НА ТАБЛИЦА име_на_таблица ПРОМЯНА НА КОЛОНА старо_име ново_име тип_данни; | Преименува колона или променя типа ѝ |
| ПРОМЕНИ ТАБЛИЦАТА име_на_таблица ЗАМЕНИ КОЛОНИ (…); | Заменя целия списък с колони с нов |
| ALTER TABLE име_на_таблица SET TBLPROPERTIES ('EXTERN'='TRUE'); | Преобразува управлявана таблица във външна, а FALSE я обръща |
| DROP TABLE [АКО СЪЩЕСТВУВА] име_на_таблица [PURGE]; | Премахва таблицата; PURGE пропуска папката „кошче“, така че данните не могат да бъдат възстановени. |
| TRUNCATE [ТАБЛИЦА] име_на_таблица; | Премахва всички редове, но запазва схемата; само управлявани таблици |
Две предпазни мерки си струва да бъдат вградени във всеки скрипт. IF EXISTS предотвратява неуспешно премахване на таблица, която вече е била премахната, а DESCRIBE FORMATTED потвърждава дали целта е MANAGED_TABLE или EXTERNAL_TABLE, преди да се изпълни премахването.





