Ошибка куста при попытке выполнить обновление таблицы, которая не является транзакционной - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь обновить временную таблицу в кусте с помощью следующей команды:

alter table para1 add columns(log_flag int);
update para1 set log_flag = (
  case 
            when name like '%LANDING__TIME' then 1 
            when name like '%LOGIN_START_TIME' then 2
            when name like '%LOGIN_TIME' then 3
            else 4
  end
  );

Ниже приводится ошибка, которую я получил:

ОШИБКА: Ошибка выполнения: org. apache .hive.service.cli.HiveSQLException: ошибка при компиляции оператора: СБОЙ: SemanticException [Ошибка 10297]: попытка обновить или удалить таблицу df.para1, которая не является транзакционной

Это мешает мне обновить таблицу новой условной переменной log_flag, и я действительно не уверен, в чем причина.

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 30 января 2020

Используйте INSERT OVERWRITE для нетранзакционной таблицы:

INSERT OVERWRITE table para1
select 
     col1, ... coln, --list all other columns (columns positions should match)
     case 
            when name like '%LANDING__TIME'    then 1 
            when name like '%LOGIN_START_TIME' then 2
            when name like '%LOGIN_TIME'       then 3
            else 4
    end as log_flag 
from para1;

Если это временная таблица, гораздо лучше вычислить флаг в начальной загрузке.

...