类别:

数据生成函数

SEQ1 / SEQ2 / SEQ4 / SEQ8

返回单调递增整数的序列(带回绕)。回绕发生在整型宽度(1、2、4 或 8 字节)可表示的最大整型之后。

重要

此函数使用序列生成一组唯一的递增整数,但不一定生成无间隙的序列。在处理大量数据时,序列中可能会出现间隙。如果需要完全有序的无间隙序列,请考虑使用 ROW_NUMBER 窗口函数。

有关 Snowflake 中的序列的更多详细信息,请参阅 使用序列

语法

SEQ1( [0|1] )

SEQ2( [0|1] )

SEQ4( [0|1] )

SEQ8( [0|1] )
Copy

使用说明

  • 如果可选符号实参为 0,则在回绕之后,序列从 0 处继续。如果可选符号实参为 1,则序列将根据给定的整型宽度,以最小的可表示数字继续。

  • 默认符号实参为 0。

示例

以下是使用序列的基本示例:

SELECT seq8() FROM table(generator(rowCount => 5));

+--------+
| SEQ8() |
|--------|
|      0 |
|      1 |
|      2 |
|      3 |
|      4 |
+--------+
Copy
SELECT * FROM (SELECT seq2(0), seq1(1) FROM table(generator(rowCount => 132))) ORDER BY seq2(0) LIMIT 7 OFFSET 125;

+---------+---------+
| SEQ2(0) | SEQ1(1) |
|---------+---------|
|     125 |     125 |
|     126 |     126 |
|     127 |     127 |
|     128 |    -128 |
|     129 |    -127 |
|     130 |    -126 |
|     131 |    -125 |
+---------+---------+
Copy

此示例展示了如何使用 ROW_NUMBER 生成无间隙序列:

SELECT ROW_NUMBER() OVER (ORDER BY seq4()) 
    FROM TABLE(generator(rowcount => 10));
+-------------------------------------+
| ROW_NUMBER() OVER (ORDER BY SEQ4()) |
|-------------------------------------|
|                                   1 |
|                                   2 |
|                                   3 |
|                                   4 |
|                                   5 |
|                                   6 |
|                                   7 |
|                                   8 |
|                                   9 |
|                                  10 |
+-------------------------------------+
Copy
语言: 中文