Hive Table is MANAGED или EXTERNAL - преобразование типа таблицы после выдачи - PullRequest
0 голосов
/ 29 июня 2018

У меня есть таблица улья в XYZ db с именем ABC.

Когда я запускаю describe formatted XYZ.ABC; из оттенка, я получаю следующее ..

MANAGED TABLE SHOWN AS EXTERNAL

то есть

Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True

Так это на самом деле внешняя или управляемая / внутренняя таблица кустов?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Пример -

Позволяет создать образец Управляемая таблица ,

CREATE TABLE TEST_TBL(abc int, xyz string);
INSERT INTO TABLE test_tbl values(1, 'abc'),(2, 'xyz');
DESCRIBE FORMATTED test_tbl;

MANAGED_TABLE describe table image

Изменение типа на ВНЕШНЕЕ (неверно, используя True вместо TRUE) :

ALTER TABLE test_tbl SET TBLPROPERTIES('EXTERNAL'='True');

Это дает, External Table Wrongly shown image

Теперь давайте УБРАТЬ стол , DROP TABLE test_tbl;

Результат:

Таблица удалена, но данные по HDFS - нет. Отображение правильного поведения внешней таблицы!

Если мы воссоздадим таблицу, мы увидим, что данные существуют:

CREATE TABLE test_tbl(abc int, xyz string);
SELECT * FROM test_tbl;

Результат: Output of select *

В описании это неправильно показано как MANAGED TABLE вместе с EXTERNAL True из-за:

.equals проверка в мета

Hive Issue JIRA: HIVE-20057

Предлагаемое исправление: Использование без учета регистра равно

0 голосов
/ 29 июня 2018

Это рассматривается как таблица EXTERNAL. Таблица удаления сохранит базовые данные HDFS. Тип таблицы отображается как MANAGED_TABLE, поскольку для параметра EXTERNAL установлено значение True вместо TRUE.

Чтобы исправить эти метаданные, вы можете выполнить этот запрос:

hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');

Некоторые детали:

Таблица XYZ.ABC должна быть создана с помощью запроса такого типа:

hive> CREATE TABLE XYZ.ABC
<additional table definition details>
TBLPROPERTIES (
  'EXTERNAL'='True');

Описание этой таблицы даст:

hive> desc formatted XYZ.ABC;
:
Location:               hdfs://<location_of_data>
Table Type:             MANAGED_TABLE
:
Table Parameters:
  EXTERNAL              True

Удаление этой таблицы сохранит данные, указанные в Location в describe выводе.

 hive> drop table XYZ.ABC;
 # does not drop table data in HDFS

Table Type по-прежнему отображается как MANAGED_TABLE, что сбивает с толку.

Установка значения для EXTERNAL как TRUE исправит это.

hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');

Теперь, выполнение describe покажет это как ожидалось:

hive> desc formatted XYZ.ABC;
:
Location:               hdfs://<location_of_data>
Table Type:             EXTERNAL_TABLE
:
Table Parameters:
    EXTERNAL                TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...