timescaledb 是否有一种技术可以删除行以减少旧时间刻度数据的频率?

Is there a technique with timescaledb to delete rows to reduce the frequency of older timescale data?

我在 hypertable 中存储了很多行。即使在当前的测试配置中,table 大小现在也变得相当大。

对于超过一周的数据,我想通过删除一些较旧的记录,将数据的频率从每 5 秒一次减少到每 60 秒一次。

谁能推荐一种这样做的方法,或者更适合 timescaledb 设计的更好方法?

所以下一个版本将有一些围绕连续聚合的数据保留策略的功能,这样您就可以定义一个连续聚合策略,将次要数据汇总为详细数据,然后删除旧的次要数据比某个时间段。

(这种能力目前不存在连续聚合,但很快就会出现。现在最好的方法是拥有一些删除旧数据的 cron 作业,或者从一个 table聚合时到一秒钟,然后在第一个 table 上调用 drop_chunks。)

好的,我已经阅读了 2 分钟的 timescaledb 文档,所以我是专家,对吧。这是我的建议:

  1. 您已经有一个 table(我将其称为业务 table)和一个包含原始 5 秒数据的超级table
  2. 使用与第一个 hypertable
  3. 相同的列创建第二个 hypertable
  4. 使用 60 秒窗口函数和读数数据的平均值、最小值或最大值插入第二个 hypertable(您必须决定哪个聚合函数对您的情况有意义。)这个插入 SQL 看起来像:
INSERT into minute_table (timestamp, my_reading) 
(SELECT time_bucket('60 seconds', time) as the_minute, avg(my_raw_reading)
  FROM five_second_table
  WHERE time < (now() - interval '1week')
  GROUP BY the_minute
);
  1. 接下来,从5秒hypertable中删除其中时间戳在60秒hypertable任意时间范围内的地方。

  2. 最后,每周安排这样的事情到 运行。

抱歉,我并不精通所有 timescaledb 函数,但这应该可以让您开始 'heavy lift' 手动聚合 5 秒到 60 秒的样本。

看看Data Retention

例如:

SELECT drop_chunks(interval '24 hours', 'conditions');

这将从超表 'conditions' 中删除仅包含早于此持续时间的数据的所有块,并且不会删除块中的任何单独数据行。