Timescale Cloud:性能、规模、企业级

自托管产品

MST

连续聚合表可以有多种不同的刷新策略。除了使用策略自动刷新连续聚合表外,您还可以手动刷新它。

连续聚合表需要一个策略才能自动刷新。您可以根据不同的用例进行调整。例如,即使数据从超表中移除,您也可以使连续聚合表和超表保持同步。或者,即使源数据从超表中移除,您也可以将其保留在连续聚合表中。

您可以通过调用 add_continuous_aggregate_policy 来更改连续聚合表的刷新方式。

add_continuous_aggregate_policy 接受以下参数(等等):

  • start_offset:刷新窗口的开始时间,相对于策略运行时
  • end_offset:刷新窗口的结束时间,相对于策略运行时
  • schedule_interval:刷新间隔(分钟或小时)。默认为 24 小时。

请注意以下事项:

  • 如果您将 start_offsetend_offset 设置为 NULL,则范围是开放式的,并延伸到时间的开始或结束。

  • 如果您将 end_offset 设置在当前时间分桶内,则此分桶将从物化中排除。这样做有以下原因:

    • 当前分桶不完整,无法刷新。
    • 当前分桶按时间戳顺序写入大量数据,其聚合结果会很快过时。排除它可以提高性能。

    要在查询中包含最新的原始数据,请启用实时聚合

有关所需和可选参数的完整列表以及使用示例,请参阅API 参考

  1. 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 设置为一个月或更短。这会将您的策略设置为不刷新已删除的数据。

  1. 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 以获得开放式范围,但我们不建议使用它,因为您可能会无意中物化大量数据,降低性能,并对数据保留等其他策略产生意外后果。

  1. 要手动刷新连续聚合表,请使用 refresh 命令:

    CALL refresh_continuous_aggregate('example', '2021-05-01', '2021-06-01');

遵循自动化刷新策略所使用的逻辑,避免刷新可能存在大量写入的时间分桶。这意味着您通常不应刷新最新的不完整时间分桶。要在查询中包含最新的原始数据,请改用实时聚合

关键词

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