CREATE MATERIALIZED VIEW 语句用于创建连续聚合。要了解更多信息,请参阅连续聚合操作指南

语法是

CREATE MATERIALIZED VIEW <view_name> [ ( column_name [, ...] ) ]
WITH ( timescaledb.continuous [, timescaledb.<option> = <value> ] )
AS
<select_query>
[WITH [NO] DATA]

<select_query> 的形式为

SELECT <grouping_exprs>, <aggregate_functions>
FROM <hypertable or another continuous aggregate>
[WHERE ... ]
GROUP BY time_bucket( <const_value>, <partition_col_of_hypertable> ),
[ optional grouping exprs>]
[HAVING ...]

连续聚合视图默认为 WITH DATA。这意味着在创建视图时,它会使用底层超级表或连续聚合中的所有当前数据进行刷新。这在视图创建时发生一次。如果您希望定期刷新视图,可以使用刷新策略。如果您不希望在首次创建视图时更新它,请使用 WITH NO DATA 参数。有关更多信息,请参阅 refresh_continuous_aggregate

连续聚合对它们可以支持的查询类型有一些限制。有关更多信息,请参阅连续聚合部分

对于运行 TimescaleDB v2.17.1 及更高版本的服务,为了在少量更改的情况下显著减少写入连续聚合的数据量,降低刷新连续聚合的 i/o 成本,并生成更少的预写日志 (WAL),请将 timescaledb.enable_merge_on_cagg_refresh [配置参数][modify-parameters] 设置为 TRUE。这使连续聚合刷新能够使用合并而不是删除旧的物化数据并重新插入。

有关连续聚合的更多设置,请参阅 timescaledb_information.continuous_aggregates

名称类型描述
<view_name>TEXT要创建的连续聚合视图的名称(可选模式限定)
<column_name>TEXT要用于视图列的名称的可选列表。如果未给出,则列名从查询中计算得出
WITH 子句TEXT指定连续聚合视图的选项
<select_query>TEXT使用指定语法的 SELECT 查询

必需的 WITH 子句选项

名称类型描述
timescaledb.continuousBOOLEAN如果未指定 timescaledb.continuous,则这是一个常规的 PostgresSQL 物化视图

可选的 WITH 子句选项

名称类型描述默认值
timescaledb.materialized_onlyBOOLEAN查询连续聚合视图时仅返回物化数据TRUE
timescaledb.create_group_indexesBOOLEAN在其 GROUP BY 子句中为列上的连续聚合创建索引。索引的形式为 (<GROUP_BY_COLUMN>, time_bucket)TRUE
timescaledb.finalizedBOOLEAN在 TimescaleDB 2.7 及更高版本中,使用新版本的连续聚合,它存储聚合函数的最终结果。支持所有聚合函数,包括使用 FILTERORDER BYDISTINCT 子句的函数。TRUE

有关更多信息,请参阅实时聚合部分。

创建一个每日连续聚合视图

CREATE MATERIALIZED VIEW continuous_aggregate_daily( timec, minl, sumt, sumh )
WITH (timescaledb.continuous) AS
SELECT time_bucket('1day', timec), min(location), sum(temperature), sum(humidity)
FROM conditions
GROUP BY time_bucket('1day', timec)

在相同的原始超级表之上添加一个三十天连续聚合

CREATE MATERIALIZED VIEW continuous_aggregate_thirty_day( timec, minl, sumt, sumh )
WITH (timescaledb.continuous) AS
SELECT time_bucket('30day', timec), min(location), sum(temperature), sum(humidity)
FROM conditions
GROUP BY time_bucket('30day', timec);

在相同的原始超级表之上添加一个每小时连续聚合

CREATE MATERIALIZED VIEW continuous_aggregate_hourly( timec, minl, sumt, sumh )
WITH (timescaledb.continuous) AS
SELECT time_bucket('1h', timec), min(location), sum(temperature), sum(humidity)
FROM conditions
GROUP BY time_bucket('1h', timec);

关键词

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