2015-12-03 2 views
0

Шаг 1. Я создаю таблицу «улей» внешней таблицы «укрытие» и даю некоторое местоположение «/ user/hive2».
Шаг 2. Загружаю файл в таблицу «test».
Шаг 3. Я делаю выбор * из теста. Я получаю свои записи.
Шаг 4. Я бросаю стол, проверяя тестовый стол.
Шаг 5. Я выбираю * из теста и получаю таблицу не найденной.Каково значение внешней таблицы улья?

Каково значение использования внешней таблицы? Если метаданные удалены из таблицы «test», и я не могу запросить что-либо на нем, то почему мы используем внешнюю таблицу?

ответ

0

Несколько вещей.

  1. Вы указываете местоположение данных. Если вы просто создадите управляемую таблицу, Hive определит, где она хранит данные таблицы, но во внешней таблице вы можете определить это местоположение.

  2. Внешняя таблица может указывать на данные, которые уже существуют в указанном месте. В вашем примере вы вставляете в пустую внешнюю таблицу, но один вариант использования - создать таблицу, указывающую на место, где хранятся данные. Другими словами, если данные уже существуют, нет необходимости вставлять их в таблицу.

  3. Самое главное, если вы удалите таблицу, данные не удаляются. В управляемой таблице, если вы вставляете данные и затем отбрасываете таблицу, Hive удаляет определение таблицы из метастора, но ALSO удаляет сами данные. Во внешней таблице удаляется только ссылка на метастор, и данные остаются там, где вы указали.

1

@Nishant: вы должны сделать небольшую домашнюю работу, прежде чем задавать общие вопросы на этом форуме. В любом случае, вот краткая ссылка для подробного объяснения внешних таблиц улья в целом - External Hive Tables

Когда вы бросаете внутреннюю таблицу, она отбрасывает данные, а также бросает метаданные. У вас больше не будет доступа к данным

Когда вы бросаете внешнюю таблицу, она только снижает метаданные. Это означает, что улей сейчас не знают данных. Он не касается самих данных. Теперь вы можете получить доступ к данным и выполнить любые операции (при необходимости). Внешние таблицы также являются предпочтительными, когда вам нужно пит-стоп для ваших данных, а затем сбросить все данные, чтобы управляемый стол для ульев opertaions

Кроме того, вот заметки из другой stackoverflow нити

Используйте внешние таблицы, когда:

  1. Данные также используются за пределами улья. Например, файлы данных считываются и обрабатываются существующей программой, которая не блокирует файлы.
  2. Данные должны оставаться в базовом местоположении даже после ТАБЛИЦЫ DROP. Это может применяться, если вы указываете несколько схем (таблиц или представлений) в одном наборе данных или если вы выполняете итерацию через различные возможные схемы.
  3. Вы хотите использовать пользовательское местоположение, такое как ASV.
  4. Улей не должен владеть данными и настройками управления, dirs и т. Д., У вас есть другая программа или процесс, которые будут делать эти вещи.
  5. Вы не создаете таблицу на основе существующей таблицы (AS SELECT).

таблицы Использование ВНУТРЕННИЕ когда:

  1. Данные временно.
  2. Вы хотите, чтобы улей полностью управлял жизненным циклом таблицы и данных.

Вы хотите, чтобы Hive полностью управлял жизненным циклом таблицы и данных.

Надеюсь, это полезно.

0

Шаг 4. Я бросаю стол по тесту таблицы сбрасыванием.

Шаг 5. Я выбираю * из теста и получаю таблицу не найденной.

Предположим, вы воссоздали таблицу испытаний.

Пробег: Выбрать * из теста. Этот запрос возвращает данные bcoz table test - это внешняя таблица.

Таблица удаляется (метаданные), но данные существуют в HDFS.

То же самое не произойдет с внутренними таблицами, которые также удаляют данные из HDFS.

0

Каково значение использования внешней таблицы? Если метаданные удалены из таблицы «test», и я не могу запросить что-либо на нем, то почему мы используем внешнюю таблицу?

При удалении внешней таблицы основные файлы данных остаются нетронутыми. Если вы хотите запросить таблицу, не бросайте метаданные. Как вы можете запросить таблицу, сбросив метаданные?

В отличие от внутренней таблицы, где данные являются временными и удаляются после создания таблицы, внешняя таблица по-прежнему хранит данные в исходном каталоге. Взгляните на соответствующий question

Даже после удаления метаданных, по-прежнему можно получить доступ к файлу данных в исходном каталоге.

+0

Спасибо всем за их вклад. Это было полезно – earl

0
  1. Если вы хотите получить доступ к таблице с помощью инструментов ETL, нам необходимо создать внешние таблицы.
  2. Если вы хотите создать таблицу 2, которая имеет ту же схему, что и таблица 1, тогда внешние таблицы полезны. создать внешнюю таблицу table2 as (select * from table1)
  3. Если вы хотите добавить новые данные в таблицу, сохранив старый набор данных, как тогда, тогда будут полезны внешние таблицы.