首页 > 解决方案 > 在redshif中创建动态数字序列视图

问题描述

实际上,我想取消嵌套保存在 redshift 列中的 json 数组,为此我想生成动态数字序列视图。

我可以通过使用获得最大大小的 json 数组,SELECT MAX(JSON_ARRAY_LENGTH(metadata)) FROM input_table然后我想创建一个如下所示的视图

CREATE VIEW seq_0_to_3 AS
SELECT 0 AS i UNION ALL                                      
SELECT 1 UNION ALL
SELECT 2 UNION ALL
............
SELECT max_size_of_json_arrays
)

添加新数据时,最大 json 数组大小会有所不同,那么如何为“n”行创建动态视图

标签: sqlamazon-web-servicesamazon-redshift

解决方案


如果表中有足够的行,则可以使用:

select seqnum
from (select max(json_array_length(metadata)) over () as max_row,
             row_number() over () as seqnum
      from input_table
     ) i
where seqnum <= max_row;

请注意,如果表大于预期的最大大小,您可能需要限制行数:

select seqnum
from (select max(json_array_length(metadata)) over () as max_row,
             row_number() over () as seqnum
      from (select i.* from input_table limit 1000) i
     ) i
where seqnum <= max_row;

或者,如果您有一个计数表或日历表,则可以使用它。


推荐阅读