处理时间序列数据的一个内在部分是数据的相关性会随着时间的推移而降低。随着新数据的积累,旧数据的价值越来越低,并且很少(如果有的话)更新。因此,您经常希望删除旧的原始数据以节省磁盘空间。
这在与连续聚合结合使用时特别有用。原始数据被下采样到一个连续的聚合中,然后数据保留策略可以删除不再需要的订单原始数据。
NOTE
在下图中,在基础超表上删除数据不会影响连续聚合。只要您在删除数据的时间段内不刷新连续聚合,您的连续聚合就不会受到影响。
有两种方法可以从超表中删除历史数据:
1.自动数据保留策略
2.手动删除块
创建数据保留策略
自动数据保留策略根据计划和定义的规则删除数据。这些政策本质上是“一劳永逸”,这意味着维护和保养的麻烦更少。
例如,一旦为显示最高、最低、开盘和收盘值的各种时间段创建了连续聚合,许多股票交易应用程序就不需要原始交易数据。stocks_real_time 为了节省很少查询的原始数据占用的磁盘空间,您可能希望在交易时间戳超过三周前之后不断删除底层超表中的股票交易数据。
创建数据保留策略
使用该add_retention_policy()函数对stocks_real_time表进行自动保留策略:
运行此命令后,所有超过 3 周的数据都将从 中删除stocks_real_time,并创建定期保留策略。不会从您的连续聚合中删除任何数据, stocks_real_time_daily.
SELECT add_retention_policy('stocks_real_time', INTERVAL '3 weeks');
复制
2.要查看有关您的保留策略验证作业统计信息的信息,请查询 TimescaleDB 信息视图:
SELECT * FROM timescaledb_information.jobs;
复制
job_id|application_name |schedule_interval|max_runtime|max_retries|retry_period|proc_schema |proc_name |owner |scheduled|config |next_start |hypertable_schema |hypertable_name |
------+------------------------------------------+-----------------+-----------+-----------+------------+---------------------+-----------------------------------+---------+---------+------------------------------------------------------------------------------+-----------------------------+---------------------+--------------------------+
1|Telemetry Reporter [1] | 24:00:00| 00:01:40| -1| 01:00:00|_timescaledb_internal|policy_telemetry |postgres |true | |2022-05-04 21:52:45.304 -0400| | |
1000|Refresh Continuous Aggregate Policy [1000]| 01:00:00| 00:00:00| -1| 01:00:00|_timescaledb_internal|policy_refresh_continuous_aggregate|tsdbadmin|true |{"end_offset": "00:01:00", "start_offset": "02:00:00", "mat_hypertable_id": 3}|2022-05-04 16:21:36.704 -0400|_timescaledb_internal|_materialized_hypertable_3|
复制
SELECT * FROM timescaledb_information.job_stats;
复制
hypertable_schema |hypertable_name |job_id|last_run_started_at |last_successful_finish |last_run_status|job_status|last_run_duration|next_start |total_runs|total_successes|total_failures|
---------------------+--------------------------+------+-----------------------------+-----------------------------+---------------+----------+-----------------+-----------------------------+----------+---------------+--------------+
_timescaledb_internal|_materialized_hypertable_3| 1000|2022-05-04 15:21:36.443 -0400|2022-05-04 15:21:36.704 -0400|Success |Scheduled | 00:00:00.260945|2022-05-04 16:21:36.704 -0400| 1978| 1978| 0|
| | 1|2022-05-03 21:52:45.068 -0400|2022-05-03 21:52:45.304 -0400|Success |Scheduled | 00:00:00.235434|2022-05-04 21:52:45.304 -0400| 109| 108| 1|
复制
手动删除旧的超表块
要一次性手动删除数据,请使用 TimescaleDB 函数 drop_chunks()。
此函数采用与数据保留策略类似的参数。但是,除了让您删除早于特定时间间隔的数据之外,它还允许您删除比特定时间间隔新的数据。这意味着您可以从两端有界的间隔中删除数据。
要删除超过三周的所有数据,请运行:
SELECT drop_chunks('stocks_real_time', INTERVAL '3 weeks');
复制
要删除超过两周但新于三周的所有数据:
SELECT drop_chunks(
'stocks_real_time',
older_than => INTERVAL '2 weeks',
newer_than => INTERVAL '3 weeks'
)
复制
原文链接
https://docs.timescale.com/timescaledb/latest/getting-started/data-retention/#manually-drop-older-hypertable-chunks