Улей, вставляющий max + 1 в тот же стол, не работает - PullRequest
0 голосов
/ 20 марта 2020

У меня есть сценарий ...

У меня есть таблица с именем sample с тремя столбцами:

id, name, address

, где id - это уникальный столбец автоматического приращения. вот мои данные:

идентификатор имя адрес 1 Джон Л.А. 2 Питер. VS

мой следующий столбец будет 3, 'smith', 'vegas'

я попробовал так:

insert into sample select c1 as id from (select max(id)+1 from sample) c1, 'smith' as name , 'vegas' as address;

получаю Error: Error compiling statement: FAILED: SemanticException Error in parsing (sttae=402000,code=40000)

я пробовал для udf для столбца автоинкремента, но не повезло.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Hive (увы) не поддерживает автоинкременты. Вы можете реализовать это как:

insert into sample (id, name, address)
    select coalesce(max(id) + 1, 1), 'smith' as name , 'vegas' as address
    from sample c1;

Тем не менее, я настоятельно рекомендую вам не делать этого. Два insert, работающие в одно и то же время, (вероятно) увидят одно и то же максимальное значение - и вставят одно и то же значение для идентификатора. Чтобы обойти это, вам нужно будет заблокировать всю таблицу для каждой вставки. И это довольно дорого.

Используйте взамен UUID и дату вставки.

0 голосов
/ 20 марта 2020

Это может быть синтаксис. Поскольку у меня нет экземпляра куста, чтобы попробовать,

это работает?

  insert 
    into sample 
  select max(id)+1 c1
        ,max('smith') as name 
        ,max('vegas') as address
   from sample 
...