从 Presto 中的变量生成间隔
Posted
技术标签:
【中文标题】从 Presto 中的变量生成间隔【英文标题】:Generate interval from variable in Presto 【发布时间】:2016-03-03 18:19:57 【问题描述】:在 Presto SQL 中,与常规 SQL 不同,间隔必须用反逗号创建:
INTERVAL '1' DAY
而不是
INTERVAL 1 DAY
我正在尝试生成一组日期,如下所述:https://***.com/a/2157776/2388930,但遇到了问题
INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY
如何实现?我试过了
parse((a.a + (10 * b.a) + (100 * c.a)) as varchar)
但这并不成功。
【问题讨论】:
【参考方案1】:我最终使用了 date_add:
date_add('day', -(a.a + (10 * b.a) + (100 * c.a)), date_trunc('day', now()))
【讨论】:
【参考方案2】:这不是问题的直接答案,但如果目标是复制链接的 Stack Overflow 问题 generate days from date range 中描述的结果,这里是在 Presto 中生成日期序列的替代方法:
SELECT
CAST(date_column AS DATE) date_column
FROM
(VALUES
(SEQUENCE(FROM_ISO8601_DATE('2010-01-20'),
FROM_ISO8601_DATE('2010-01-24'),
INTERVAL '1' DAY)
)
) AS t1(date_array)
CROSS JOIN
UNNEST(date_array) AS t2(date_column)
;
输出:
date_column
-------------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24
您还可以使用除DAY
之外的其他INTERVAL
值以及除'1'
之外的不同步长。
*改编自本期评论https://github.com/prestodb/presto/issues/2169#issuecomment-68521569。
【讨论】:
sequence
方法只支持最多10000个元素。超出限制时返回此错误:“序列函数的结果不能超过10000个条目”以上是关于从 Presto 中的变量生成间隔的主要内容,如果未能解决你的问题,请参考以下文章
presto计算日期间隔天数或者小时间隔——date_diff函数使用
避免 Presto 中的数据孤岛:从 Raptor 到 RaptorX 的旅程