Как создать представление в Snowflake с колонкой автоинкремента - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно создать представление в виде снежинки, но мне нужно добавить столбец автоинкремента, которого нет в таблице

1 Ответ

0 голосов
/ 06 июня 2018

Возможно использование отдельного объекта sequence, например:

create or replace table tab(i int) as select * from values('100'),('200'),('300');
create sequence seq;
create or replace view v as select i, seq.nextval as autoinc from tab;

Однако, поскольку содержимое представления не материализовано .Таким образом, если вы выберете из этого представления, столбец autoinc будет каждый раз иметь новое значение , например,

select * from v;
-----+---------+
  I  | NEXTVAL |
-----+---------+
 100 | 1       |
 200 | 2       |
 300 | 3       |
-----+---------+

select * from v;
-----+---------+
  I  | NEXTVAL |
-----+---------+
 100 | 4       |
 200 | 5       |
 300 | 6       |
-----+---------+

Если это работает для вас, это нормально.Вы также можете воссоздать последовательность перед каждым выбором из вида:

select * from v;
-----+---------+
  I  | NEXTVAL |
-----+---------+
 100 | 1       |
 200 | 2       |
 300 | 3       |
-----+---------+

create or replace sequence seq;
------------------------------------+
               status               |
------------------------------------+
 Sequence SEQ successfully created. |
------------------------------------+

select * from v;
-----+---------+
  I  | NEXTVAL |
-----+---------+
 100 | 1       |
 200 | 2       |
 300 | 3       |
-----+---------+

Однако, нет гарантии , что одна и та же запись получит одно и то же значение при каждой оценке представления.Также обратите внимание, что последовательности не гарантируют получение плотного списка чисел (могут быть дыры).

Нижняя строка - лучше всего иметь таблицу со столбцом autoincrement.

...