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 文档,所以我是专家,对吧。这是我的建议:
- 您已经有一个 table(我将其称为业务 table)和一个包含原始 5 秒数据的超级table
- 使用与第一个 hypertable
相同的列创建第二个 hypertable
- 使用 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
);
接下来,从5秒hypertable中删除其中时间戳在60秒hypertable任意时间范围内的地方。
最后,每周安排这样的事情到 运行。
抱歉,我并不精通所有 timescaledb 函数,但这应该可以让您开始 'heavy lift' 手动聚合 5 秒到 60 秒的样本。
例如:
SELECT drop_chunks(interval '24 hours', 'conditions');
这将从超表 'conditions' 中删除仅包含早于此持续时间的数据的所有块,并且不会删除块中的任何单独数据行。
我在 hypertable 中存储了很多行。即使在当前的测试配置中,table 大小现在也变得相当大。
对于超过一周的数据,我想通过删除一些较旧的记录,将数据的频率从每 5 秒一次减少到每 60 秒一次。
谁能推荐一种这样做的方法,或者更适合 timescaledb 设计的更好方法?
所以下一个版本将有一些围绕连续聚合的数据保留策略的功能,这样您就可以定义一个连续聚合策略,将次要数据汇总为详细数据,然后删除旧的次要数据比某个时间段。
(这种能力目前不存在连续聚合,但很快就会出现。现在最好的方法是拥有一些删除旧数据的 cron 作业,或者从一个 table聚合时到一秒钟,然后在第一个 table 上调用 drop_chunks。)
好的,我已经阅读了 2 分钟的 timescaledb 文档,所以我是专家,对吧。这是我的建议:
- 您已经有一个 table(我将其称为业务 table)和一个包含原始 5 秒数据的超级table
- 使用与第一个 hypertable 相同的列创建第二个 hypertable
- 使用 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 );
接下来,从5秒hypertable中删除其中时间戳在60秒hypertable任意时间范围内的地方。
最后,每周安排这样的事情到 运行。
抱歉,我并不精通所有 timescaledb 函数,但这应该可以让您开始 'heavy lift' 手动聚合 5 秒到 60 秒的样本。
例如:
SELECT drop_chunks(interval '24 hours', 'conditions');
这将从超表 'conditions' 中删除仅包含早于此持续时间的数据的所有块,并且不会删除块中的任何单独数据行。