Единственная разница в поведении (не предполагаемое использование), основанная на моих ограниченных исследованиях и тестировании (с использованием Hive 1.1.0 -cdh5.12.0), похоже, заключается в том, что при удалении таблицы
- данные внутренних (управляемых) таблиц удаляются из файловой системы HDFS
- в то время как данные внешних таблиц НЕ удаляются из файловой системы HDFS.
(ПРИМЕЧАНИЕ. См. Раздел «Управляемые и внешние таблицы» в https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL, в котором перечислены некоторые другие различия, которые я не полностью понял)
Я считаю, что Hive выбирает место, где ему нужно создать таблицу, на основе следующего приоритета сверху вниз
- Местоположение определено во время создания таблицы
- Местоположение определено в Создании базы данных / схемы, в которой создается таблица.
- Каталог хранилища Hive по умолчанию (свойство hive.metastore.warehouse.dir в hive.site.xml)
Когда параметр «Местоположение» не используется во время «создания таблицы куста», используется указанное выше правило приоритета. Это применимо как для внутренних, так и для внешних таблиц. Это означает, что внутренняя таблица не обязательно должна находиться в каталоге хранилища и может располагаться где-нибудь еще.
Примечание: я мог пропустить некоторые сценарии, но, судя по моему ограниченному исследованию, поведение как внутренней, так и внешней таблицы кажется одинаковым, за исключением одного различия (удаление данных), описанного выше. Я пробовал следующие сценарии для внутренних и внешних таблиц.
- Создание таблицы с опцией Location и без нее
- Создание таблицы с опцией разделения и без нее
- Добавление новых данных с помощью операторов Hive Load и Insert
- Добавление файлов данных в расположение таблицы вне Hive (с помощью команд HDFS) и обновление таблицы с помощью команды «MSCK REPAIR TABLE»
- Удаление столов