本教程使用名为 metrics
的超表中一年多的能耗数据。
Timescale 中的服务是一个包含数据库的云实例。每个服务包含一个名为 tsdb
的数据库。您可以使用 psql
命令行实用程序从本地系统连接到服务。如果您以前使用过 PostgreSQL,您可能已经安装了 psql
。如果没有,请查看 安装 psql 部分。
在 Timescale 门户中,单击
创建服务
。单击
下载速查表
下载一个 SQL 文件,其中包含您的新服务的登录详细信息。您也可以直接从此页面复制详细信息。复制密码后,单击页面底部的我已存储密码,转到服务概览
。当您的服务准备就绪时,
服务概览
中会显示绿色的运行中
标签。您还会收到一封电子邮件,确认您的服务已准备就绪。在您的本地系统上,在命令提示符下,使用您下载的 SQL 文件中的
服务 URL
连接到服务。当系统提示时,输入密码psql -x "<SERVICE_URL>"Password for user tsdbadmin:如果连接成功,您将看到类似这样的消息,后跟
psql
提示符psql (13.3, server 12.8 (Ubuntu 12.8-1.pgdg21.04+1))SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)Type "help" for help.tsdb=>
本教程使用典型家庭一年多的能耗数据。您可以使用此数据来分析能耗模式。
超表是 Timescale 的核心。超表使 Timescale 能够高效地处理时间序列数据。由于 Timescale 是 PostgreSQL,因此所有标准的 PostgreSQL 表、索引、存储过程和其他对象都可以与您的 Timescale 超表一起创建。这使得创建和使用 Timescale 表类似于标准 PostgreSQL。
使用
CREATE TABLE
创建一个标准的 PostgreSQL 表来存储能耗数据CREATE TABLE "metrics"(created timestamp with time zone default now() not null,type_id integer not null,value double precision not null);使用 Timescale 提供的
create_hypertable()
函数将标准表转换为在time
列上分区的超表。您必须提供表名以及表中包含用于分区的 timestamp 数据的列SELECT create_hypertable('metrics', by_range('created'));注意
by_range
维度构建器是 TimescaleDB 2.13 的新增功能。
设置好数据库后,您可以将能耗数据加载到 metrics
超表中。
重要提示
这是一个大型数据集,因此可能需要很长时间,具体取决于您的网络连接。
下载数据集
使用文件管理器解压缩下载的数据集,并记下
metrics.csv
文件的路径。在 psql 提示符下,将数据从
metrics.csv
文件复制到您的超表中。如果该文件不在您当前的工作目录中,请确保指向正确的路径\COPY metrics FROM metrics.csv CSV;您可以使用此命令检查数据是否已成功复制
SELECT * FROM metrics LIMIT 5;您应该得到五个如下所示的记录
created | type_id | value-------------------------------+---------+-------2023-05-31 23:59:59.043264+00 | 13 | 1.782023-05-31 23:59:59.042673+00 | 2 | 1262023-05-31 23:59:59.042667+00 | 11 | 1.792023-05-31 23:59:59.042623+00 | 23 | 0.4082023-05-31 23:59:59.042603+00 | 12 | 0.96
时间序列数据通常增长非常快。这意味着将数据聚合为有用的摘要可能会变得非常慢。连续聚合使数据聚合速度极快。
如果您非常频繁地收集数据,您可能希望将数据聚合为分钟或小时。例如,如果您有一个每秒读取一次温度读数的表,您可以找到每小时的平均温度。每次运行此查询时,数据库都需要扫描整个表并每次重新计算平均值。
连续聚合是一种超表,当添加新数据或修改旧数据时,它会在后台自动刷新。对数据集的更改会被跟踪,并且连续聚合背后的超表会在后台自动更新。
您无需手动刷新连续聚合,它们会在后台持续且增量地更新。连续聚合的维护负担也比常规 PostgreSQL 物化视图低得多,因为每次刷新时都不会从头开始创建整个视图。这意味着您可以继续处理数据,而不是维护数据库。
由于连续聚合基于超表,因此您可以像查询其他表一样查询它们,并在连续聚合上启用 压缩 或 分层存储。您甚至可以在 连续聚合之上创建连续聚合。
默认情况下,查询连续聚合会为您提供实时数据。来自物化视图的预聚合数据与尚未聚合的最新数据相结合。这为您在每次查询时提供最新的结果。
创建一个名为
kwh_day_by_day
的连续聚合,用于按天计算的能耗CREATE MATERIALIZED VIEW kwh_day_by_day(time, value)with (timescaledb.continuous) asSELECT time_bucket('1 day', created, 'Europe/Berlin') AS "time",round((last(value, created) - first(value, created)) * 100.) / 100. AS valueFROM metricsWHERE type_id = 5GROUP BY 1;添加刷新策略以保持连续聚合为最新
SELECT add_continuous_aggregate_policy('kwh_day_by_day',start_offset => NULL,end_offset => INTERVAL '1 hour',schedule_interval => INTERVAL '1 hour');创建一个名为
kwh_hour_by_hour
的连续聚合,用于按小时计算的能耗CREATE MATERIALIZED VIEW kwh_hour_by_hour(time, value)with (timescaledb.continuous) asSELECT time_bucket('01:00:00', metrics.created, 'Europe/Berlin') AS "time",round((last(value, created) - first(value, created)) * 100.) / 100. AS valueFROM metricsWHERE type_id = 5GROUP BY 1;添加刷新策略以保持连续聚合为最新
SELECT add_continuous_aggregate_policy('kwh_hour_by_hour',start_offset => NULL,end_offset => INTERVAL '1 hour',schedule_interval => INTERVAL '1 hour');您可以确认已创建连续聚合
SELECT view_name, format('%I.%I', materialization_hypertable_schema,materialization_hypertable_name) AS materialization_hypertableFROM timescaledb_information.continuous_aggregates;您应该看到这个
view_name | materialization_hypertable------------------+--------------------------------------------------kwh_day_by_day | _timescaledb_internal._materialized_hypertable_2kwh_hour_by_hour | _timescaledb_internal._materialized_hypertable_3
本教程中的查询适用于在 Grafana 中可视化。如果您想可视化查询结果,请将您的 Grafana 帐户连接到能耗数据集。
集成之前
创建一个目标 Timescale Cloud 服务
您需要 您的连接详细信息 才能按照此页面中的步骤操作。此过程也适用于 自托管的 TimescaleDB。
- 安装 自托管 Grafana 或注册 Grafana Cloud。
要将服务中的数据连接到 Grafana
登录到 Grafana
在浏览器中,登录到以下任一
- 自托管 Grafana:位于
https://127.0.0.1:3000/
。默认凭据为admin
,admin
。 - Grafana Cloud:使用您创建帐户时设置的 URL 和凭据。
- 自托管 Grafana:位于
将您的服务添加为数据源
- 打开
连接
>数据源
,然后单击添加新数据源
。 - 从列表中选择
PostgreSQL
。 - 配置连接
主机 URL
、用户名
、密码
和数据库
:使用您的 连接详细信息 进行配置。数据库名称
:提供数据集的名称。TLS/SSL 模式
:选择require
。PostgreSQL 选项
:启用TimescaleDB
。- 所有其他字段保留默认设置。
- 打开
单击
保存并测试
Grafana 检查您的详细信息是否设置正确。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。