Timescale Cloud:性能、扩展、企业级

自托管产品

MST

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 配置参数设置为 TRUE。这允许连续聚合刷新使用合并而不是删除旧的物化数据并重新插入。

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

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

必需的 WITH 子句选项

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

可选的 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 上。