【发布时间】:2021-03-30 05:18:28
【问题描述】:
我在 AWS 上有一个数据湖,使用 Athena 进行查询,具有以下结构和示例数据
Key | Date | Value
----+---------------+-------
a | 01/01/2020 | 4.5
a | 05/01/2020 | 6
a | 06/01/2020 | 3.2
b | 01/01/2020 | 2.4
b | 03/01/2020 | 5
我想运行一个查询来为特定的date 和每个key 提取values。如果日期不是已知日期,例如 99% 的时间,则值应作为最接近的两个日期的线性插值返回。
为简单起见,Dates 在此处以 dd/mm/YYYY 格式报告,但在数据湖中存储为时间戳。
结果示例
如果我想在 1 月 2 日(2020 年 2 月 1 日)获得 values,预期的输出是
Key | Date | Value
----+---------------+-------
a | 02/01/2020 | 4.875
b | 02/01/2020 | 3.70
其中 4.875 是 4.5(2020 年 1 月 1 日的值)和 6(2020 年 5 月 1 日的值)之间的线性插值。我手动将其评估为(y - 4.5) / (2 - 1) = (6 - 4.5) / (5 - 1)(更多参考请参见linear interpolation)。
3.7 相同
我怎样才能通过一个查询来实现(如果可能)?
假设:从我们搜索的点开始,我们总是有一个越来越小的日期。
更新 - 基于 PrestoDB 的 Athena 不支持 JOIN LATERAL,所以我不能考虑这个选项
【问题讨论】:
标签: sql greatest-n-per-group presto amazon-athena lateral-join