您可以通过将数据保留策略与连续聚合结合使用来对数据进行降采样。如果您正确设置刷新策略,则可以从超表中删除旧数据,而不会从任何连续聚合中删除它。这使您可以节省原始数据存储空间,同时保留用于历史分析的汇总数据。

警告

要在删除原始数据的同时保留聚合,您必须小心刷新聚合。您可以从底层表中删除原始数据,而不会删除连续聚合中的数据,只要您不刷新已删除数据上的聚合即可。当您刷新连续聚合时,Timescale 会根据刷新窗口中原始数据的更改来更新聚合。如果它看到原始数据已被删除,它也会删除聚合数据。为防止这种情况,请确保聚合的刷新窗口不与任何已删除的数据重叠。有关更多信息,请参见以下示例。

例如,假设您将一个连续聚合添加到存储设备温度的 conditions 超表中

CREATE MATERIALIZED VIEW conditions_summary_daily (day, device, temp)
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 day', time), device, avg(temperature)
FROM conditions
GROUP BY (1, 2);
SELECT add_continuous_aggregate_policy('conditions_summary_daily', '7 days', '1 day', '1 day');

这将创建一个 conditions_summary_daily 聚合,用于存储每个设备的每日温度。聚合每天刷新。每次刷新时,它都会使用 7 天前到 1 天前的任何数据更改进行更新。

您**不应**在 conditions 超表上设置 24 小时的保留策略。如果这样做,则会删除 1 天前的数据块。然后,聚合会根据数据更改进行刷新。由于数据更改是删除 1 天前的数据,因此聚合也会删除数据。最终,conditions_summary_daily 表中没有数据。

要解决此问题,请设置更长的保留策略,例如 30 天

SELECT add_retention_policy('conditions', INTERVAL '30 days');

现在,将删除 30 天前的数据块。但是,当聚合刷新时,它不会查找 30 天前的更改。它仅查找 7 天到 1 天之间的更改。原始超表仍然包含该时间段的数据。因此,您的聚合保留了数据。

您也可以对连续聚合本身应用数据保留。例如,您可以将原始数据保留 30 天,如前所述。同时,您可以将每日数据保留 600 天,并且不保留更久的数据。

关键词

在此页面上发现问题?报告问题 或 编辑此页 在 GitHub 上。