[技术文章] 时序数据库TimescaleDB

[复制链接]
作者
n2n1   发布于2021-11-18 06:15:40 来自河北

DS PostgreSQL实例新增TimescaleDB插件版本,支持时序数据的自动分片、高效写入、检索、准实时聚合等。

目前RDS PostgreSQL对外开放的是Open Source版本的TimescaleDB,由于License等问题,可能暂不支持一些高级特性,详情参见TimescaleDB。


注意 该插件需要提交工单后由技术人员介入支持,过程中将会重启实例,请评估业务影响后提交工单。

前提条件

实例版本为PostgreSQL 11、12。


说明 部分存量用户可能已经创建过TimescaleDB插件,如果升级内核小版本后,出现如下类似提示:[backcolor=rgba(115, 119, 122, 0.3)]

ERROR:  could not access file "$libdir/timescaledb-1.3.0": No such file or directory

请在对应数据库执行如下SQL更新插件:

[backcolor=rgba(115, 119, 122, 0.3)]
alter extension timescaledb update;


添加TimescaleDB插件

使用pgAdmin客户端连接实例,添加TimescaleDB,命令如下:

[backcolor=rgba(115, 119, 122, 0.3)]
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
创建时序表
  • 创建标准表conditions,示例如下:[backcolor=rgba(115, 119, 122, 0.3)]
    CREATE TABLE conditions (  time        TIMESTAMPTZ       NOT NULL,  location    TEXT              NOT NULL,  temperature DOUBLE PRECISION  NULL,  humidity    DOUBLE PRECISION  NULL);
  • 创建时序表,示例如下:[backcolor=rgba(115, 119, 122, 0.3)]
    SELECT create_hypertable('conditions', 'time');

说明 详细命令说明请参见Create a Hypertable

高效写入您可以使用标准SQL命令将数据插入超表(Hypertables),示例如下:[backcolor=rgba(115, 119, 122, 0.3)]
INSERT INTO conditions(time, location, temperature, humidity)  VALUES (NOW(), 'office', 70.0, 50.0);

您还可以一次将多行数据插入到超表中,示例如下:[backcolor=rgba(115, 119, 122, 0.3)]
INSERT INTO conditions  VALUES    (NOW(), 'office', 70.0, 50.0),    (NOW(), 'basement', 66.5, 60.0),    (NOW(), 'garage', 77.0, 65.2);

检索您可以使用高级SQL查询检索数据,示例如下:[backcolor=rgba(115, 119, 122, 0.3)]
--过去3小时内,每15分钟采集一次数据,按时间和温度排序。SELECT time_bucket('15 minutes', time) AS fifteen_min,    location, COUNT(*),    MAX(temperature) AS max_temp,    MAX(humidity) AS max_hum  FROM conditions  WHERE time > NOW() - interval '3 hours'  GROUP BY fifteen_min, location  ORDER BY fifteen_min DESC, max_temp DESC;
p47336.png

您也可以使用固有的函数进行分析查询,示例如下:

[backcolor=rgba(115, 119, 122, 0.3)]
--均值查询(Median)SELECT percentile_cont(0.5)  WITHIN GROUP (ORDER BY temperature)  FROM conditions;
p47337.png [backcolor=rgba(115, 119, 122, 0.3)]
--移动平均数(Moving Average)SELECT time, AVG(temperature) OVER(ORDER BY time      ROWS BETWEEN 9 PRECEDING AND CURRENT ROW)    AS smooth_temp  FROM conditions  WHERE location = 'garage' and time > NOW() - interval '1 day'  ORDER BY time DESC;
p47338.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 创建账号

本版积分规则

Archiver|小黑屋|( 冀ICP备2021005463号 )

GMT+8, 2024-11-21 20:36 , Processed in 0.112814 second(s), 30 queries , Gzip On.

N2N1 It社区 n2n1.cn

Copyright © 2001-2021,MeiCheng.

快速回复 返回顶部 返回列表