【问题标题】:How to create multiple continuous aggregates over one table in TimescaleDB?如何在 TimescaleDB 中的一张表上创建多个连续聚合?
【发布时间】:2019-06-20 06:23:44
【问题描述】:

我有这个带有超表的series 表。我想对该表中的数据进行不同的连续聚合。

CREATE TABLE series (
    time TIMESTAMPTZ PRIMARY KEY,
    value INTEGER
);

SELECT create_hypertable('series', 'time');

CREATE VIEW mat_view1
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 day', time) AS day,
AVG(value)
FROM series
GROUP BY day;

CREATE VIEW mat_view2
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 week', time) AS week,
COUNT(value)
FROM series
GROUP BY week;

但似乎在 PostgreSQL 11 中是不可能的 - 这是我在运行上面的查询时得到的:

ERROR:  hypertable already has a continuous aggregate
RECOMMENDATION:  hypertables currently only support a single continuous aggregate. Drop the other continuous aggreagate to add a new one.

甚至不可能在同一张表上创建不同的超表。

ERROR:  hypertable already has a continuous aggregate
RECOMMENDATION:  hypertables currently only support a single continuous aggregate. Drop the other continuous aggreagate to add a new one.

是否可以解决此限制?或者我应该使用另一种方法(例如,为每个连续聚合复制series 表:-x)?

【问题讨论】:

    标签: sql postgresql-11 timescaledb


    【解决方案1】:

    从 TimescaleDB 1.4.0 开始支持此功能,请参阅: https://github.com/timescale/timescaledb/blob/master/CHANGELOG.md#140-2019-07-18

    以前 Timescale 不支持此功能,但您可以执行以下操作:创建 1 个包含您可能需要的所有详细信息的连续聚合,并为第二个用例创建常规视图。

    CREATE VIEW mat_view1
    WITH (timescaledb.continuous) AS
    SELECT time_bucket('1 day', time) AS day,
    AVG(value) AS avg,
    COUNT(value) AS count
    FROM series
    GROUP BY day;
    
    CREATE VIEW view2 AS
    SELECT time_bucket('1 week', day) AS week,
    SUM(count) AS count
    FROM mat_view1
    GROUP BY week;
    

    【讨论】:

    • 感谢您的快速回复。至少解决方法是可能的。 :-) 然后我们需要等待 Timescale 1.4。你能告诉一个大概的发布日期吗?
    • 周是我能给你的最好的近似值
    猜你喜欢
    • 2021-10-29
    • 2020-12-31
    • 2021-11-07
    • 2021-04-26
    • 2021-10-03
    • 2023-02-03
    • 2016-10-04
    • 2021-11-29
    • 2021-11-21
    相关资源
    最近更新 更多