最近刚刚开始使用 TimescaleDB 和 Postgres 来处理大多数数据请求。
然而,我遇到了一个问题,即我对时间序列数据的请求效率极低。
它是一个可以是任意时间长度、具有特定整数值的数据系列。
大多数时候,除非出现异常,否则该值将是相同的。所以不是获取 +10,000 行数据。我想将其汇总为“时间块”。
假设一行中有 97 个项目,其值为 100(每 5 分钟有一个新项目)#98,一行中 5 个项目的值为 48,然后另外 2,900 行的值为 100。
我不想获取 3002 项来显示此数据。我应该只需要取 3 件物品。
- 1 个项目表示从 startDate 算起的值为 100
- 1 个项目表示从 #1 之后的 startDate 开始该值为 48
- 1 个项目表示从 #2 之后的 startDate 起该值再次为 100
但我在弄清楚如何使用 timescaledb 来做到这一点时遇到了一些麻烦。
基本上,如果该值与最后一个值相同,则对其进行聚合。这就是我需要它做的一切。
有谁知道如何使用连续聚合(或者如果有更快的方法)在 timescaleDB 中构建这种情况的 VIEW 来获取它?
您可以使用窗口函数和子选择来实现所需的结果:
SELECT time, value FROM (
SELECT
time,
value,
value - LAG(value) OVER (ORDER BY time) as diff
FROM hypertable) ht
WHERE diff IS NULL OR diff != 0;
您使用窗口函数计算与上一行的差异,然后过滤外部查询中差异为 0 的所有行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)