PostgreSQL的GENERATE_SERIES函数在Presto中的等效替代方案是什么
Presto替代GENERATE_SERIES生成连续序列的方案
Presto没有内置PostgreSQL风格的GENERATE_SERIES函数,可通过以下两种常用方式实现相同效果:
- 方案1:使用
unnest+sequence函数(最简洁,推荐常规场景使用)sequence是Presto原生提供的序列生成函数,支持指定起始值、结束值、可选步长,再配合unnest将数组展开为行即可,对应你的需求代码如下:
SELECT * FROM ( SELECT unnest(sequence(0, 30)) AS days )
如果需要调整序列步长,比如每2天生成一个值,修改为sequence(0, 30, 2)即可。
- 方案2:使用递归CTE(适合复杂递推场景)
如果有自定义的序列生成逻辑,可使用递归公共表达式实现:
WITH RECURSIVE days_series AS ( -- 递归起始值 SELECT 0 AS days UNION ALL -- 递归规则,直到满足终止条件 SELECT days + 1 FROM days_series WHERE days < 30 ) SELECT days FROM days_series;
注意:Presto默认递归深度上限为1000,如需生成更长的序列,可先执行set session max_recursion_depth = 目标长度;调整会话参数
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

