连续聚合可以有各种不同的刷新策略。除了使用策略自动刷新连续聚合之外,您还可以手动刷新它。
连续聚合需要一个策略来进行自动刷新。您可以调整此策略以适应不同的用例。例如,您可以使连续聚合和超表保持同步,即使从超表中删除了数据,或者您也可以在从超表中删除源数据后,仍将其保留在连续聚合中。
您可以通过调用 add_continuous_aggregate_policy
来更改连续聚合的刷新方式。
其中,add_continuous_aggregate_policy
接受以下参数
start_offset
:刷新窗口的开始时间,相对于策略运行的时间end_offset
:刷新窗口的结束时间,相对于策略运行的时间schedule_interval
:刷新间隔,以分钟或小时为单位。默认为 24 小时。
如果您将 start_offset
或 end_offset
设置为 NULL
,则范围是开放式的,并延伸到时间的开始或结束。但是,建议设置 end_offset
,以便至少排除最近的时间桶。对于主要包含按时间戳顺序写入的时序数据,写入量大的时间桶中的聚合会很快过时。通过排除正在进行大量写入的时间桶,您可以获得更好的性能。
此外,物化最近的时间桶可能会干扰实时聚合。
有关必需参数和可选参数的完整列表以及使用示例,请参阅API 参考。
在
psql
提示符下,创建一个名为conditions_summary_hourly
的新策略,该策略使连续聚合保持最新,并每小时运行一次SELECT add_continuous_aggregate_policy('conditions_summary_hourly',start_offset => NULL,end_offset => INTERVAL '1 h',schedule_interval => INTERVAL '1 h');
此示例中的策略确保连续聚合中的所有数据与超表保持同步,除了最近一小时内写入的任何数据。它也不会刷新连续聚合的最后一个时间桶。由于它具有开放式的 start_offset
参数,因此从表中删除的任何数据(例如,使用 DELETE 或 drop_chunks
删除的数据)也会从连续聚合视图中删除。这意味着连续聚合始终反映底层超表中的数据。
如果您希望即使从底层超表中删除数据,也将其保留在连续聚合中,则可以将 start_offset
设置为与源超表上的数据保留策略匹配。例如,如果您有一个保留策略,用于删除超过一个月的数据,请将 start_offset
设置为一个或少于一个月。这样设置您的策略,使其不会刷新已删除的数据。
在
psql
提示符下,创建一个名为conditions_summary_hourly
的新策略,该策略将从超表中删除的数据保留在连续聚合中,并每小时运行一次SELECT add_continuous_aggregate_policy('conditions_summary_hourly',start_offset => INTERVAL '1 month',end_offset => INTERVAL '1 h',schedule_interval => INTERVAL '1 h');
注意
在设置连续聚合策略时,考虑您的数据保留策略非常重要。如果连续聚合策略窗口覆盖了数据保留策略删除的数据,则在刷新这些桶的聚合时,数据将被删除。例如,如果您有一个数据保留策略,用于删除所有超过两周的数据,则连续聚合策略将仅包含最近两周的数据。
如果您需要手动刷新连续聚合,可以使用 refresh
命令。这将重新计算自上次刷新以来底层超表中已更改窗口内的数据。因此,如果只有少数几个桶需要更新,则刷新会快速运行。
如果您最近使用带有连续聚合的超表删除了数据,则在包含已删除数据块的区域上调用 refresh_continuous_aggregate
会重新计算不包含已删除数据的聚合。有关更多信息,请参阅删除数据。
refresh
命令接受三个参数
- 要刷新的连续聚合视图的名称
- 刷新窗口开始时间的时间戳
- 刷新窗口结束时间的时间戳
仅刷新完全在指定范围内的桶。例如,如果您指定 2021-05-01', '2021-06-01
,则仅刷新到但不包括 2021-06-01 的桶。可以在手动刷新中指定 NULL 以获得开放式范围,但我们不建议使用它,因为您可能会无意中物化大量数据,降低性能,并对其他策略(如数据保留)产生意想不到的后果。
要手动刷新连续聚合,请使用
refresh
命令CALL refresh_continuous_aggregate('example', '2021-05-01', '2021-06-01');
避免刷新可能有很多写入的时间间隔。一般来说,这意味着您永远不应该刷新最近的时间桶。由于底层数据的不断变化,它们不太可能产生准确的聚合。此外,由于写入放大,刷新此数据会降低超表的摄取速率。如果您想在查询中包含最新的桶,请改用实时聚合。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。