我需要在雪花中创建一个视图,但我需要添加一个表中不存在的自动增量列
问问题
1081 次
2 回答
1
可以使用单独的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
列的表格。
于 2018-06-06T04:01:32.410 回答
0
将 Row_Number Partition by 子句放入您的查询中。
ROW_NUMBER() OVER (
[ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
)
于 2019-12-11T17:18:46.837 回答