sql - 在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”行创建动态视图
解决方案
如果表中有足够的行,则可以使用:
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;
或者,如果您有一个计数表或日历表,则可以使用它。
推荐阅读
- javascript - Javascript/JSON/nodejs:将一组值随机分配给一组玩家而不给玩家自己输入的值的最佳方法
- javascript - 测试一个函数是否在另一个函数 Jest 中被调用
- python - 在模拟的导入类上调用断言的函数失败
- amazon-web-services - 验证失败:[在 {/} 中遇到不支持的属性:[EnvironmentVariables]]
- python - 输入不兼容
- javascript - 可以在从 UI 以角度上传之前压缩大文件吗?
- python-3.x - 如何过滤 Series.split() 返回的 Series 中的列表项
- c# - 将服务实例作为方法参数传递
- google-chrome - 飞行前请求仅在 Chrome 上返回 404
- openssl - Raspberry Pi 4 上的 Ubuntu 20.04 上的 asio.ssl 错误“初始化时关闭”