如何在雪花中创建具有自动增量列的视图



我需要在雪花中创建一个视图,但我需要添加一个表中不存在的自动增量列

可以使用单独的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列的表。

将Row_Number分区依据子句放入查询中。

ROW_NUMBER() OVER (
[ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
)

链接到ROW_NUMBER文档

相关内容

  • 没有找到相关文章

最新更新