很久没有写有关时序数据的处理的代码了。今天想要将时序数据按指定的间隔降采样想了很久都没有想出来,在一通的查阅博客之后看见当前pg数据库已经更新了,添加了新特性可以直接运用。
pg数据库拓展TimescaleDB的特性:
1.时序数据表的透明自动分区特性
2.提供了若干面向时序数据应用场景的特殊SQL接口
3.针对时序数据的写入和查询对PostgreSQL的 Planner 进行扩展
4.面向时序数据表的定制化并行查询
TimescaleDB的对外接口就是SQL,它100%地继承了PG所支持的全部SQL特性。除此之外,面向时序数据库的使用场景,它也定制了一些接口供用户在应用中使用,而这些接口都是通过 SQL函数(标准名称为 User-defined Function)予以呈现的。以下列举了一些这类接口的例子:
time_bucket()函数
该函数用于 降采样 查询时使用,通过该函数指定一个时间间隔,从而将时序数据按指定的间隔降采样,并辅以所需的聚合函数从而实现降采样查询。
新增的聚合函数,TimescaleDB提供了下述新的聚合函数
first() 求被聚合的一组数据中的第一个值
last() 求被聚合的一组数据中的最后一个值
histogram() 求被聚合的一组数据中值分布的直方图
例:
SELECT
time_bucket('1 minutes', data_time) "startDate",
time_bucket('1 minutes', data_time) + interval '1 minutes' "endDate",
first(data_value, data_time) "minValue", first(data_time, data_time) "minValueDate",
last(data_value, data_time) "maxValue" ,last(data_time, data_time) "maxValueDate"
FROM
data_realtime
where 1=1
group by "startDate"
ORDER BY "startDate"
drop_chunks()
删除指定时间点之前/之后的数据chunk. 比如删除三个月时间前的所有chunk等等。这个接口可以用来类比 InfluxDB 的 Retention Policies 特性,但是目前TimescaleDB尚未实现自动执行的chunk删除。若需要完整的 Retention Policies 特性,需要使用系统级的定时任务(如 crontab)加上drop_chunks()语句来实现。删除指定时间点之前/之后的数据chunk. 比如删除三个月时间前的所有chunk等等。这个接口可以用来类比 InfluxDB 的 Retention Policies 特性,但是目前TimescaleDB尚未实现自动执行的chunk删除。若需要完整的 Retention Policies 特性,需要使用系统级的定时任务(如 crontab)加上drop_chunks()语句来实现。
例:
SELECT drop_chunks(older_than => interval '3 months', newer_than => interval '4 months', table_name => 'conditions');