如何解决TimescaleDB time_bucket() 函数给出任意时间间隔的意外结果
我创建了一个 hypertable water_meter 来存储传感器数据
它包含以下按时间戳升序排列的数据
select * from water_meter order by time_stamp;
可以看出我有从 01 May 2020
开始的数据
如果我使用 time_bucket() 函数获取每 1 天的聚合:
SELECT
time_bucket('1 days',time_stamp) as bucket,thing_key,avg(pulsel) as avg_pulse_l,avg(pulseh) as avg_pulse_h
FROM
water_meter
GROUP BY thing_key,bucket;
它工作正常,我得到以下数据:
现在,如果我用它来获取 15 天的聚合,我会得到意想不到的结果,其中显示了 17 April 2020
的起始时间段,而表中没有数据
SELECT
time_bucket('15 days',bucket;
解决方法
time_bucket
函数将事物存储到具有隐含范围的存储桶中,即 15 分钟的存储桶可能会显示为“2021-01-01 01:15:00.000+00”或其他内容,但它会包含时间戳在 ['2021-01-01 01:15:00','2021-01-01 01:30:00') 范围内 - 包含左侧,不包含右侧。同样的事情发生了好几天。该存储桶已确定并恰好在 4 月 17 日开始,但将包含以下范围内的数据:["2020-04-17 00:00:00+00","2020-05-02 00:00:00 +00")。您可以使用 TimescaleDB Toolkit extension 中的实验函数来获取这些范围:SELECT toolkit_experimental.time_bucket_range('15 days'::interval,'2020-05-01');
也可以使用offset or origin parameters of the time_bucket function来修改开头:select time_bucket('15 days'::interval,'2020-05-01',origin=>'2020-05-01');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。