Вставка нескольких столов в один стол в улье - PullRequest
0 голосов
/ 31 октября 2018

У меня есть многораздельная таблица кустов, разделенная на столбец 'part'. Таблица имеет два значения разделов: part = 'good' и part = 'bad'.

Мне нужно переместить запись из «плохого» раздела в «хороший» раздел и перезаписать «плохой» раздел, чтобы удалить эту перемещенную запись. Чтобы усложнить это, я ищу способ сделать это в одном запросе, иначе обработка исключений была бы затруднена.

Я попытался сделать это с многостоловой вставкой, имеющей два запроса на вставку для одной и той же таблицы, как показано ниже,

from tbl_partition
insert into tbl_partition partition (part='good') select a,b,c where a='a' and part='bad' -- this is where a record is moved from bad to good
insert overwrite table tbl_partition partition (part='bad') select a,b,c where part='bad' and a not in ('a'); -- Overwrite the bad partition excluding already moved record

Но приведенный выше запрос всегда выполняет вставку, а не одну вставку, а другая вставка перезаписывает !!

Я даже пытался использовать общее табличное выражение и использовал общую таблицу для одновременной вставки в эту таблицу, но не повезло!

Есть ли другой способ, которым это может быть достигнуто в одном запросе, или я делаю что-то не так в предыдущем шаге?

Обратите внимание, что я делаю это на кластере HDP с кустом 1.2

...