问题描述
我的应用程序基于某些启发式功能,对我不断变化的数据集的一部分进行每小时一次的分析,所有部分更新都保存在一个大表中。因此,对于每个分区,分析都是以不规则的间隔触发的。
在访问有关单个分区的数据时,查询通常是高性能的。但是,新请求的功能之一是图表,它显示了总体趋势。对于给定期间的每个小时,我需要汇总每个分区到该时间点的最新可用数据。
在任何给定时间内获取汇总数据相对简单:
select
max(t.timestamp) as analysis_timestamp,sum(t.column1) as aggregate1,sum(t.column2)/sum(t.column3) as aggregate2,from (
select max(id) as last_id,partition_key from my_table
where timestamp < '2020-08-01 12:00:00' group by partition_key
) as latest
left join my_table t on latest.last_id = t.id;
这将返回在查询中设置的时间戳具有正确值的行:
analysis_timestamp | aggregate1 | aggregate2
----------------------------+-------------------+--------------------
2020-08-01 11:35:24.138942 | 4529383.990000015 | 1.0644286969003778
我想获得多行,每整整一个小时用作子查询中某个范围的时间戳记过滤器。例如,对于2020-08-01 12:00:00
-2020-08-02 12:00:00
范围:
analysis_timestamp | aggregate1 | aggregate2
----------------------------+-------------------+--------------------
2020-08-01 11:35:24.138942 | 4529383.990000015 | 1.0644286969003778
2020-08-01 12:38:29.357938 | 4321691.210000011 | 1.0643205989383653
2020-08-01 13:36:48.153008 | 4320697.810000006 | 1.064240032298849
...
2020-08-02 10:43:17.777413 | 4320374.999999988 | 1.0644218979245774
2020-08-02 11:41:55.142559 | 4321029.210000006 | 1.0644020500213083
我发现我可以通过1小时的粒度遍历时间戳范围
select timestamp_filter from generate_series(
datetime_pl('2020-08-01','12:00:00'),datetime_pl('2020-08-02','1 hour'
) as timestamp_filter;
但是我不知道如何在以上查询的上下文中使用此timestamp_filter
。如何才能做到这一点?该查询很少被请求,并且它的性能不是关键任务,因此仅针对此用例进行优化的非规范化是不值得的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)