Как изменить виртуальный столбец в снежинке

есть таблица с виртуальным столбцом в снежинке вроде:

create table my_tbl(
  key       number, 
  name      varchar(60), 
  owner     varchar(60),
  value     number, 
  check_sum number as hash(key, name, value)
);

Не могли бы вы посоветовать, изменен ли этот столбец с помощью оператора alter?

Я пробовал что-л. Вроде

alter table my_tbl modify column check_sum number as hash(key, name, value, owner)

но это не работает


person atema    schedule 11.02.2021    source источник
comment
Вы можете изменить только тип столбца на синонимический тип, см. здесь   -  person Sergiu    schedule 11.02.2021
comment
Честно говоря, я пытаюсь заменить число на число с расширенным списком хеш-значений. Так что я мог видеть падение только в одну сторону и создавать его снова и снова. Я прав?   -  person atema    schedule 11.02.2021
comment
Это таблица с виртуальным столбцом, создающая таблицу my_tbl (номер ключа, имя varchar (60), номер значения, номер контрольной_суммы в виде хеша (ключ, имя, значение, владелец));   -  person atema    schedule 12.02.2021
comment
Какую ошибку вы получаете?   -  person Sergiu    schedule 12.02.2021
comment
синтаксическая ошибка строка 1 в позиции 60 неожиданное 'as'.   -  person atema    schedule 12.02.2021


Ответы (2)


Я могу придумать быстрое решение проблемы:

create table my_tbl(
  key       number, 
  name      varchar(60), 
  owner     varchar(60),
  value     number, 
  check_sum number as hash(key, name, value)
);

alter table my_tbl add column check_sum_new number as hash(key, name, value, owner);

alter table my_tbl drop column check_sum;

alter table my_tbl rename column check_sum_new to check_sum;

describe table my_tbl;
person SANJIT KHASNOBIS    schedule 12.02.2021

Исправляя мой предыдущий ответ, как отмечает Санджит, вы можете иметь виртуальные столбцы в Snowflake.

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

create temp table my_derived (x int, my_virtual int as (x*10) );

insert into my_derived(x) values(3);

select * from my_derived;

update my_derived set x=40;

select * from my_derived;

(работает как положено)

См. Ответ Санджита для удаления решения и добавления нового виртуального столбца.

person Felipe Hoffa    schedule 17.02.2021