Explore this snippet with some demo data here.
Snowflake supports the ARRAY column type - here are a few methods for generating arrays.
Arrays can contain most types, and they don't have to have the same supertype.
select
array_construct(1, 2, 3) as num_array,
array_construct('a', 'b', 'c') as str_array,
array_construct(null, 'hello', 3::double, 4, 5) mixed_array,
array_construct(current_timestamp(), current_timestamp()) as timestamp_array
NUM_ARRAY | STR_ARRAY | MIXED_ARRAY | TIMESTAMP_ARRAY |
---|---|---|---|
[1,2,3] | ["a","b","c"] | [null,"hello",3,4,5] | ["2021-07-02 11:37:36.205 -0400","2021-07-02 11:37:36.205 -0400"] |
Analogous to numpy.linspace()
.
See this Snowflake article for more details.
For generating a sequence of dates without gaps, you can use GENERATOR in combination with SEQ4:
select row_number() over (order by seq4()) consecutive_nums
from table(generator(rowcount => 10));
CONSECUTIVE_NUMS |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Or to generate a sequence of consecutive dates, you can add TIMEADD:
SELECT TIMEADD('day', row_number() over (order by 1), '2020-08-30')::date date
FROM TABLE(GENERATOR(ROWCOUNT => 10));
DATE |
---|
2020-08-30 |
2020-09-01 |
2020-09-02 |
2020-09-03 |
2020-09-04 |
2020-09-05 |
2020-09-06 |
2020-09-07 |
2020-09-08 |
2020-09-09 |
Aggregate a column into a single row element.
SELECT ARRAY_AGG(num)
FROM (SELECT 1 num UNION ALL SELECT 2 num UNION ALL SELECT 3 num)
ARRAY_AGG(NUM) |
---|
[1,2,3] |