【问题标题】:How do I create a view in Snowflake with an autoincrement column如何在 Snowflake 中使用自动增量列创建视图
【发布时间】:2018-11-10 19:07:57
【问题描述】:

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

【问题讨论】:

    标签: sql database auto-increment snowflake-cloud-data-platform


    【解决方案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 列的表格。

    【讨论】:

      【解决方案2】:

      将 Row_Number Partition by 子句放入您的查询中。

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

      Link to ROW_NUMBER Docs

      【讨论】:

        猜你喜欢
        • 2012-12-23
        • 2013-07-27
        • 1970-01-01
        • 2021-12-09
        • 2021-06-02
        • 1970-01-01
        • 2014-05-25
        • 1970-01-01
        相关资源
        最近更新 更多