Может ли кто-нибудь сказать мне разницу между внешней таблицей Hive и внутренними таблицами. Я знаю, что разница наступает, когда вы бросаете стол. Я не понимаю, что вы имеете в виду, говоря, что данные и метаданные удаляются во внутренних таблицах, а во внешних таблицах удаляются только метаданные. Кто-нибудь может объяснить мне, пожалуйста, узлы.
110
Таблицы улья могут быть ВНЕШНИМИ или ВНУТРЕННИМИ. Это выбор, который влияет на то, как данные загружаются, контролируются и управляются.
Используйте ВНЕШНИЕ таблицы, когда:
Используйте ВНУТРЕННИЕ таблицы, когда:
источник
Чтобы ответить на ваш вопрос:
Для внешних таблиц Hive хранит данные в МЕСТЕ, указанном при создании таблицы (обычно не в каталоге хранилища). Если внешняя таблица удаляется, то удаляются метаданные таблицы, но не данные.
Для внутренних таблиц Hive хранит данные в своем каталоге хранилища. Если таблица будет удалена, будут удалены и метаданные таблицы, и данные.
Для справки,
Разница между внутренними и внешними таблицами:
У Hive могут быть внутренние или внешние таблицы, это выбор, который влияет на то, как данные загружаются, контролируются и управляются.
Используйте ВНЕШНИЕ таблицы, когда:
Используйте ВНУТРЕННИЕ таблицы, когда:
Источник :
HDInsight: внутренние и внешние таблицы Hive, введение
Внутренние и внешние таблицы в Hadoop-HIVE
источник
Данные внутренней таблицы хранятся в папке хранилища, тогда как данные внешней таблицы хранятся в месте, указанном вами при создании таблицы.
Таким образом, когда вы удаляете внутреннюю таблицу, она удаляет схему, а также данные в папке хранилища, но для внешней таблицы вы потеряете только схему.
Поэтому, когда вы хотите, чтобы внешняя таблица снова вернулась после ее удаления, вы можете снова создать таблицу с той же схемой и указать ее на исходное местоположение данных. Надеюсь, теперь все ясно.
источник
Единственная разница в поведении (не предполагаемое использование), основанная на моих ограниченных исследованиях и тестировании (с использованием Hive 1.1.0 -cdh5.12.0), похоже, заключается в том, что при удалении таблицы
(ПРИМЕЧАНИЕ. См. Раздел «Управляемые и внешние таблицы» в https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL, в котором перечислены некоторые другие различия, которые я не полностью понял)
Я считаю, что Hive выбирает место, где ему нужно создать таблицу, на основе следующего приоритета сверху вниз
Когда параметр «Местоположение» не используется во время «создания таблицы куста», используется указанное выше правило приоритета. Это применимо как для внутренних, так и для внешних таблиц. Это означает, что внутренняя таблица не обязательно должна находиться в каталоге хранилища и может располагаться где-нибудь еще.
Примечание: я мог пропустить некоторые сценарии, но, судя по моему ограниченному исследованию, поведение как внутренней, так и внешней таблицы кажется одинаковым, за исключением одного различия (удаление данных), описанного выше. Я пробовал следующие сценарии для внутренних и внешних таблиц.
источник
Во внешних таблицах, если вы отбрасываете его, удаляется только схема таблицы, данные таблицы существуют в физическом месте. Итак, чтобы удалить данные, используйте hadoop fs - rmr tablename. Управляемый куст таблиц будет иметь полный контроль над таблицами. Во внешних таблицах пользователи будут контролировать это.
источник
Внутренние таблицы полезны, если вы хотите, чтобы Hive управлял полным жизненным циклом ваших данных, включая удаление, тогда как внешние таблицы полезны, когда файлы используются вне Hive.
источник
Преимущество внешней таблицы-улья заключается в том, что она не удаляет файлы, когда мы удаляем таблицы, мы можем установить форматы строк с различными настройками, такими как serde .... с разделителями.
источник
Также имейте в виду, что Hive - это хранилище больших данных. Когда вы хотите удалить таблицу, вы не хотите терять гигабайты или терабайты данных. Создание, перемещение и копирование данных в таком масштабе может занять много времени. Когда вы отбрасываете «управляемый» куст таблицы, он также удаляет свои данные. Когда вы удаляете «внешнюю» таблицу, удаляется только определение схемы из мета-хранилища улья. Данные о hdfs все еще остаются.
источник
Рассмотрим этот сценарий, который лучше всего подходит для внешней таблицы:
Задание MapReduce (MR) фильтрует огромный файл журнала для вывода
n
вспомогательных файлов журнала (например, каждый вспомогательный файл журнала содержит журнал определенного типа), а выходные данные, то естьn
вспомогательные файлы журнала, хранятся в hdfs.Эти файлы журналов должны быть загружены в таблицы Hive для выполнения дальнейшей аналитики, в этом сценарии я бы рекомендовал внешние таблицы, потому что фактические файлы журналов создаются и принадлежат внешнему процессу, то есть заданию MR, кроме того, вы можете избежать дополнительный шаг загрузки каждого сгенерированного файла журнала в соответствующую таблицу Hive.
источник
Наилучший вариант использования внешней таблицы в улье - это когда вы хотите создать таблицу из файла CSV или текста.
источник
hive хранит только метаданные в хранилище метаданных, а исходные данные - вне улья, когда мы используем внешнюю таблицу, мы можем указать местоположение '', поэтому наши исходные данные не будут влиять, когда мы отбрасываем таблицу
источник
Если в HDFS уже есть данные, можно создать внешнюю таблицу Hive для описания данных. Он называется ВНЕШНИМ, потому что данные во внешней таблице указаны в свойствах LOCATION вместо каталога хранилища по умолчанию.
При хранении данных во внутренних таблицах Hive полностью управляет жизненным циклом таблицы и данных. Это означает, что данные удаляются после удаления внутренней таблицы. Если внешняя таблица удаляется, метаданные таблицы удаляются, но данные сохраняются. В большинстве случаев рекомендуется использовать внешнюю таблицу, чтобы избежать ошибочного удаления данных вместе с таблицами.
источник
Для управляемых таблиц Hive контролирует жизненный цикл своих данных. Hive хранит данные для управляемых таблиц в подкаталоге в каталоге, определенном по умолчанию hive.metastore.warehouse.dir.
Когда мы удаляем управляемую таблицу, Hive удаляет данные из нее, но управляемые таблицы менее удобны для совместного использования с другими инструментами. Например, предположим, что у нас есть данные, которые создаются и используются в основном Pig, но мы хотим выполнить некоторые запросы к ним, но не передавать Hive право владения данными.
В это время определяется внешняя таблица, которая указывает на эти данные, но не принимает на себя ответственность за них.
источник
ВНУТРЕННИЙ : таблица создается первой, а данные загружаются позже.
ВНЕШНИЙ : Данные в настоящее время и таблица будет создана поверх него.
источник
В Hive мы также можем создать внешнюю таблицу. Он сообщает Hive о необходимости ссылаться на данные, которые находятся в существующем месте за пределами каталога хранилища. Удаление внешних таблиц приведет к удалению метаданных, но не данных.
источник
Я хотел бы добавить это
источник
Проще говоря, есть две вещи:
Hive может управлять вещами на складе, т.е. не удаляет данные со склада. Когда мы удаляем таблицу:
1) Для внутренних таблиц данные обрабатываются внутри хранилища. Так будет удален.
2) Для внешних таблиц данные управляются вечно из хранилища. Таким образом, его нельзя удалить, и клиенты, кроме улья, также могут его использовать.
источник