使用TimescaleDB插件
POLARDB for PostgreSQL数据库集群新增TimescaleDB插件1.3.0版本,支持时序数据的自动分片、高效写入、检索、准实时聚合等。
目前POLARDB for PostgreSQL 11对外开放的是Open Source版本的TimescaleDB,由于License等问题,可能暂不支持一些高级特性,详情参见TimescaleDB。
添加TimescaleDB插件
使用pgAdmin客户端连接数据库集群,添加TimescaleDB,命令如下:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
创建时序表
- 创建标准表conditions,示例如下:
CREATE TABLE conditions ( time TIMESTAMPTZ NOT NULL, location TEXT NOT NULL, temperature DOUBLE PRECISION NULL, humidity DOUBLE PRECISION NULL );
- 创建时序表,示例如下:
SELECT create_hypertable('conditions', 'time');
说明 详细命令说明请参见Create a Hypertable。
高效写入
您可以使用标准SQL命令将数据插入超表(Hypertables),示例如下:
INSERT INTO conditions(time, location, temperature, humidity)
VALUES (NOW(), 'office', 70.0, 50.0);
您还可以一次将多行数据插入到超表中,示例如下:
INSERT INTO conditions
VALUES
(NOW(), 'office', 70.0, 50.0),
(NOW(), 'basement', 66.5, 60.0),
(NOW(), 'garage', 77.0, 65.2);
检索
您可以使用高级SQL查询检索数据,示例如下:
--过去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;
您可也使用固有的函数进行分析查询,示例如下:
--均值查询(Median)
SELECT percentile_cont(0.5)
WITHIN GROUP (ORDER BY temperature)
FROM conditions;
--移动平均数(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;
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论