Что происходит с запросом пользователя, когда я обмениваюсь разделами в Hive?

Каково взаимодействие с пользователем при обмене разделами в Apache Hive? Является ли он атомарным или дискретным и состоит из нескольких шагов, таких как:

partition rename 
data copy
old partition drop
table repair

?


person Alex B    schedule 12.06.2018    source источник
comment
Вы включили менеджер блокировок или нет? (См. show locks) Если да, операции DDL устанавливают блокировку записи для таблицы/раздела, а операции чтения блокируются. Если нет, то это дикий дикий запад с FileNotFoundException изобилием.   -  person Samson Scharfrichter    schedule 12.06.2018
comment
Кстати, нет причин копировать файлы данных, достаточно mv - за исключением случаев, когда один раздел находится в HDFS, а другой - в S3, конечно.   -  person Samson Scharfrichter    schedule 12.06.2018
comment
И нет абсолютно никаких причин восстанавливать таблицы, поскольку метаданные должным образом обновляются хранилищем метаданных. Это полезно только тогда, когда хромой внешний процесс добавляет каталог без явного объявления раздела.   -  person Samson Scharfrichter    schedule 12.06.2018
comment
@SamsonScharfrichter Как писатели могут блокировать читателей в Hive?   -  person Alex B    schedule 13.06.2018
comment
Простой. Читатели вызывают Metastore, чтобы установить блокировку чтения перед запуском задания MR, а Metastore блокирует, потому что блокировка записи говорит, что данные не находятся в стабильном состоянии... Как и в любой стандартной СУБД.   -  person Samson Scharfrichter    schedule 14.06.2018


Ответы (1)


Поскольку мои исследования привели меня сюда, я решил поделиться тем, что узнал, для других пользователей Google, хотя у меня нет определенного ответа.

Более подходящим названием EXCHANGE PARTITION будет MOVE PARTITION, так как он работает только тогда, когда пункт назначения раздел не существует:

Команда EXCHANGE PARTITION переместит раздел из исходной таблицы в целевую и изменит метаданные каждой таблицы. [...]

При выполнении команды папка раздела исходной таблицы в HDFS будет переименована, чтобы переместить ее в папку раздела целевой таблицы. Хранилище метаданных Hive будет обновлено, чтобы соответствующим образом изменить метаданные исходной и целевой таблиц. [...]

Целевая таблица не может содержать раздел, подлежащий обмену.

Таким образом, эффект от длительного запроса к таблице «назначение» должен быть аналогичен эффекту ADD PARTITION, который должен быть "продолжается работать нормально", но это не так, по крайней мере, в некоторых версиях.

Это в основном согласуется с комментариями Самсона, за исключением того, что я не понимаю, почему может произойти «FileNotFoundException» (если только мы не говорим о запросе к «источнику», а не к «целевой» таблице).

person Nickolay    schedule 26.03.2020