Єдиною різницею в поведінці (а не за призначенням) на основі моїх поки що обмежених досліджень та тестувань (використовуючи вулик 1.1.0 -cdh5.12.0), здається, є те, що при падінні таблиці
- дані внутрішніх (керованих) таблиць видаляються з файлової системи HDFS
- при цьому дані зовнішніх таблиць НЕ видаляються з файлової системи HDFS.
(ПРИМІТКА. Див. Розділ "Керовані та зовнішні таблиці" на https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL, у якому перелічено деякі інші відмінності, які я не повністю зрозумів)
Я вважаю, що Hive вибирає місце, де йому потрібно створити таблицю, грунтуючись на наступному пріоритеті зверху вниз
- Місце, визначене під час створення таблиці
- Місце, визначене в Створенні бази даних / схеми, в якій створюється таблиця.
- Каталог складських вуликів за замовчуванням (властивість hive.metastore.warehouse.dir в hive.site.xml)
Коли параметр "Місце розташування" не використовується під час "створення таблиці вуликів", використовується вищевказане правило пріоритету. Це стосується як внутрішніх, так і зовнішніх таблиць. Це означає, що внутрішня таблиця не обов'язково повинна знаходитися в каталозі Склад і може розміщуватися деінде.
Примітка. Можливо, я пропустив деякі сценарії, але на основі мого обмеженого дослідження поведінка як внутрішньої, так і розширеної таблиці схоже, за винятком однієї різниці (видалення даних), описаної вище. Я спробував такі сценарії як для внутрішніх, так і для зовнішніх таблиць.
- Створення таблиці з опцією "Місце і без"
- Створення таблиці з опцією розділу та без неї
- Додавання нових даних за допомогою звітів про завантаження та вставлення вуликів
- Додавання файлів даних до місця Table поза Hive (за допомогою команд HDFS) та оновлення таблиці за допомогою команди "MSCK REPAIR TABLE"
- Відкидання таблиць