Skip to content

Commit

Permalink
Enable real time aggregation for caggs with joins
Browse files Browse the repository at this point in the history
  • Loading branch information
RafiaSabih committed Jan 30, 2023
1 parent 3348641 commit e09d667
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 61 deletions.
8 changes: 0 additions & 8 deletions tsl/src/continuous_aggs/create.c
Expand Up @@ -2567,14 +2567,6 @@ cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquer
bool finalized = DatumGetBool(with_clause_options[ContinuousViewOptionFinalized].parsed);

finalqinfo.finalized = finalized;
if (list_length(panquery->jointree->fromlist) >= CONTINUOUS_AGG_MAX_JOIN_RELATIONS &&
!materialized_only)
{
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("real-time continuous aggregates are not supported with joins"),
errhint("set materialized_only to true")));
}

/*
* Assign the column_name aliases in CREATE VIEW to the query. No other modifications to
Expand Down
42 changes: 31 additions & 11 deletions tsl/test/expected/cagg_joins-12.out
Expand Up @@ -53,6 +53,20 @@ CREATE TABLE devices_dup AS SELECT * FROM devices;
CREATE VIEW devices_view AS SELECT * FROM devices;
--Create a cagg with join between a hypertable and a normal table
-- with equality condition on inner join type
CREATE MATERIALIZED VIEW conditions_summary_daily_realtime
WITH (timescaledb.continuous) AS
SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
AVG(temperature),
MAX(temperature),
MIN(temperature),
name
FROM conditions, devices
WHERE conditions.device_id = devices.device_id
GROUP BY name, bucket;
NOTICE: refreshing continuous aggregate "conditions_summary_daily_realtime"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
--Create a cagg with join between a hypertable and a normal table
-- with equality condition on inner join type
CREATE MATERIALIZED VIEW conditions_summary_daily
WITH (timescaledb.continuous, timescaledb.materialized_only = TRUE) AS
SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
Expand Down Expand Up @@ -188,8 +202,8 @@ NOTICE: refreshing continuous aggregate "cagg_on_cagg"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
DROP MATERIALIZED VIEW cagg_on_cagg CASCADE;
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_6_35_chunk
drop cascades to table _timescaledb_internal._hyper_6_36_chunk
DETAIL: drop cascades to table _timescaledb_internal._hyper_7_37_chunk
drop cascades to table _timescaledb_internal._hyper_7_38_chunk
--Error out when real time aggregation is enabled
CREATE MATERIALIZED VIEW conditions_summary_daily_realtime
WITH (timescaledb.continuous, timescaledb.materialized_only = FALSE) AS
Expand All @@ -201,8 +215,8 @@ SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
FROM conditions, devices
WHERE conditions.device_id = devices.device_id
GROUP BY name, bucket;
ERROR: real-time continuous aggregates are not supported with joins
HINT: set materialized_only to true
ERROR: continuous aggregate "conditions_summary_daily_realtime" already exists
HINT: Drop or rename the existing continuous aggregate first or use another name.
CREATE TABLE cities(name text, currency text);
INSERT INTO cities VALUES ('Berlin', 'EUR'), ('London', 'PND');
--Error out when from clause has sub selects
Expand Down Expand Up @@ -331,16 +345,19 @@ WHERE cagg.device_id = conditions.device_id
GROUP BY conditions.temperature, bucket, cagg.name;
ERROR: joins for hierarchical continuous aggregates are not supported
DROP TABLE conditions CASCADE;
NOTICE: drop cascades to 9 other objects
DETAIL: drop cascades to view _timescaledb_internal._partial_view_3
NOTICE: drop cascades to 12 other objects
DETAIL: drop cascades to view conditions_summary_daily_realtime
drop cascades to view _timescaledb_internal._partial_view_3
drop cascades to view _timescaledb_internal._direct_view_3
drop cascades to view _timescaledb_internal._partial_view_4
drop cascades to view _timescaledb_internal._direct_view_4
drop cascades to view conditions_summary_daily_2
drop cascades to view _timescaledb_internal._partial_view_5
drop cascades to view _timescaledb_internal._direct_view_5
drop cascades to view _timescaledb_internal._partial_view_7
drop cascades to view _timescaledb_internal._direct_view_7
drop cascades to view conditions_summary_daily_2
drop cascades to view _timescaledb_internal._partial_view_6
drop cascades to view _timescaledb_internal._direct_view_6
drop cascades to view _timescaledb_internal._partial_view_8
drop cascades to view _timescaledb_internal._direct_view_8
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_3_29_chunk
drop cascades to table _timescaledb_internal._hyper_3_30_chunk
Expand All @@ -351,8 +368,11 @@ NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_5_33_chunk
drop cascades to table _timescaledb_internal._hyper_5_34_chunk
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_7_37_chunk
drop cascades to table _timescaledb_internal._hyper_7_38_chunk
DETAIL: drop cascades to table _timescaledb_internal._hyper_6_35_chunk
drop cascades to table _timescaledb_internal._hyper_6_36_chunk
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_8_39_chunk
drop cascades to table _timescaledb_internal._hyper_8_40_chunk
DROP TABLE devices CASCADE;
NOTICE: drop cascades to view devices_view
DROP TABLE conditions_dup CASCADE;
Expand Down
48 changes: 34 additions & 14 deletions tsl/test/expected/cagg_joins-13.out
Expand Up @@ -53,6 +53,20 @@ CREATE TABLE devices_dup AS SELECT * FROM devices;
CREATE VIEW devices_view AS SELECT * FROM devices;
--Create a cagg with join between a hypertable and a normal table
-- with equality condition on inner join type
CREATE MATERIALIZED VIEW conditions_summary_daily_realtime
WITH (timescaledb.continuous) AS
SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
AVG(temperature),
MAX(temperature),
MIN(temperature),
name
FROM conditions, devices
WHERE conditions.device_id = devices.device_id
GROUP BY name, bucket;
NOTICE: refreshing continuous aggregate "conditions_summary_daily_realtime"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
--Create a cagg with join between a hypertable and a normal table
-- with equality condition on inner join type
CREATE MATERIALIZED VIEW conditions_summary_daily
WITH (timescaledb.continuous, timescaledb.materialized_only = TRUE) AS
SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
Expand Down Expand Up @@ -189,8 +203,8 @@ NOTICE: refreshing continuous aggregate "cagg_on_cagg"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
DROP MATERIALIZED VIEW cagg_on_cagg CASCADE;
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_9_41_chunk
drop cascades to table _timescaledb_internal._hyper_9_42_chunk
DETAIL: drop cascades to table _timescaledb_internal._hyper_10_43_chunk
drop cascades to table _timescaledb_internal._hyper_10_44_chunk
--Error out when real time aggregation is enabled
CREATE MATERIALIZED VIEW conditions_summary_daily_realtime
WITH (timescaledb.continuous, timescaledb.materialized_only = FALSE) AS
Expand All @@ -202,8 +216,8 @@ SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
FROM conditions, devices
WHERE conditions.device_id = devices.device_id
GROUP BY name, bucket;
ERROR: real-time continuous aggregates are not supported with joins
HINT: set materialized_only to true
ERROR: continuous aggregate "conditions_summary_daily_realtime" already exists
HINT: Drop or rename the existing continuous aggregate first or use another name.
CREATE TABLE cities(name text, currency text);
INSERT INTO cities VALUES ('Berlin', 'EUR'), ('London', 'PND');
--Error out when from clause has sub selects
Expand Down Expand Up @@ -332,25 +346,28 @@ WHERE cagg.device_id = conditions.device_id
GROUP BY conditions.temperature, bucket, cagg.name;
ERROR: joins for hierarchical continuous aggregates are not supported
DROP TABLE conditions CASCADE;
NOTICE: drop cascades to 18 other objects
DETAIL: drop cascades to view _timescaledb_internal._partial_view_3
NOTICE: drop cascades to 21 other objects
DETAIL: drop cascades to view conditions_summary_daily_realtime
drop cascades to view _timescaledb_internal._partial_view_3
drop cascades to view _timescaledb_internal._direct_view_3
drop cascades to view _timescaledb_internal._partial_view_4
drop cascades to view _timescaledb_internal._direct_view_4
drop cascades to view conditions_summary_daily_2
drop cascades to view _timescaledb_internal._partial_view_5
drop cascades to view _timescaledb_internal._direct_view_5
drop cascades to view conditions_summary_daily_2_reorder
drop cascades to view conditions_summary_daily_2
drop cascades to view _timescaledb_internal._partial_view_6
drop cascades to view _timescaledb_internal._direct_view_6
drop cascades to view conditions_summary_daily_3
drop cascades to view conditions_summary_daily_2_reorder
drop cascades to view _timescaledb_internal._partial_view_7
drop cascades to view _timescaledb_internal._direct_view_7
drop cascades to view conditions_summary_daily_3_reorder
drop cascades to view conditions_summary_daily_3
drop cascades to view _timescaledb_internal._partial_view_8
drop cascades to view _timescaledb_internal._direct_view_8
drop cascades to view _timescaledb_internal._partial_view_10
drop cascades to view _timescaledb_internal._direct_view_10
drop cascades to view conditions_summary_daily_3_reorder
drop cascades to view _timescaledb_internal._partial_view_9
drop cascades to view _timescaledb_internal._direct_view_9
drop cascades to view _timescaledb_internal._partial_view_11
drop cascades to view _timescaledb_internal._direct_view_11
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_3_29_chunk
drop cascades to table _timescaledb_internal._hyper_3_30_chunk
Expand All @@ -370,8 +387,11 @@ NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_8_39_chunk
drop cascades to table _timescaledb_internal._hyper_8_40_chunk
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_10_43_chunk
drop cascades to table _timescaledb_internal._hyper_10_44_chunk
DETAIL: drop cascades to table _timescaledb_internal._hyper_9_41_chunk
drop cascades to table _timescaledb_internal._hyper_9_42_chunk
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_11_45_chunk
drop cascades to table _timescaledb_internal._hyper_11_46_chunk
DROP TABLE devices CASCADE;
NOTICE: drop cascades to view devices_view
DROP TABLE conditions_dup CASCADE;
Expand Down
48 changes: 34 additions & 14 deletions tsl/test/expected/cagg_joins-14.out
Expand Up @@ -53,6 +53,20 @@ CREATE TABLE devices_dup AS SELECT * FROM devices;
CREATE VIEW devices_view AS SELECT * FROM devices;
--Create a cagg with join between a hypertable and a normal table
-- with equality condition on inner join type
CREATE MATERIALIZED VIEW conditions_summary_daily_realtime
WITH (timescaledb.continuous) AS
SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
AVG(temperature),
MAX(temperature),
MIN(temperature),
name
FROM conditions, devices
WHERE conditions.device_id = devices.device_id
GROUP BY name, bucket;
NOTICE: refreshing continuous aggregate "conditions_summary_daily_realtime"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
--Create a cagg with join between a hypertable and a normal table
-- with equality condition on inner join type
CREATE MATERIALIZED VIEW conditions_summary_daily
WITH (timescaledb.continuous, timescaledb.materialized_only = TRUE) AS
SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
Expand Down Expand Up @@ -189,8 +203,8 @@ NOTICE: refreshing continuous aggregate "cagg_on_cagg"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
DROP MATERIALIZED VIEW cagg_on_cagg CASCADE;
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_9_41_chunk
drop cascades to table _timescaledb_internal._hyper_9_42_chunk
DETAIL: drop cascades to table _timescaledb_internal._hyper_10_43_chunk
drop cascades to table _timescaledb_internal._hyper_10_44_chunk
--Error out when real time aggregation is enabled
CREATE MATERIALIZED VIEW conditions_summary_daily_realtime
WITH (timescaledb.continuous, timescaledb.materialized_only = FALSE) AS
Expand All @@ -202,8 +216,8 @@ SELECT time_bucket(INTERVAL '1 day', day) AS bucket,
FROM conditions, devices
WHERE conditions.device_id = devices.device_id
GROUP BY name, bucket;
ERROR: real-time continuous aggregates are not supported with joins
HINT: set materialized_only to true
ERROR: continuous aggregate "conditions_summary_daily_realtime" already exists
HINT: Drop or rename the existing continuous aggregate first or use another name.
CREATE TABLE cities(name text, currency text);
INSERT INTO cities VALUES ('Berlin', 'EUR'), ('London', 'PND');
--Error out when from clause has sub selects
Expand Down Expand Up @@ -332,25 +346,28 @@ WHERE cagg.device_id = conditions.device_id
GROUP BY conditions.temperature, bucket, cagg.name;
ERROR: joins for hierarchical continuous aggregates are not supported
DROP TABLE conditions CASCADE;
NOTICE: drop cascades to 18 other objects
DETAIL: drop cascades to view _timescaledb_internal._partial_view_3
NOTICE: drop cascades to 21 other objects
DETAIL: drop cascades to view conditions_summary_daily_realtime
drop cascades to view _timescaledb_internal._partial_view_3
drop cascades to view _timescaledb_internal._direct_view_3
drop cascades to view _timescaledb_internal._partial_view_4
drop cascades to view _timescaledb_internal._direct_view_4
drop cascades to view conditions_summary_daily_2
drop cascades to view _timescaledb_internal._partial_view_5
drop cascades to view _timescaledb_internal._direct_view_5
drop cascades to view conditions_summary_daily_2_reorder
drop cascades to view conditions_summary_daily_2
drop cascades to view _timescaledb_internal._partial_view_6
drop cascades to view _timescaledb_internal._direct_view_6
drop cascades to view conditions_summary_daily_3
drop cascades to view conditions_summary_daily_2_reorder
drop cascades to view _timescaledb_internal._partial_view_7
drop cascades to view _timescaledb_internal._direct_view_7
drop cascades to view conditions_summary_daily_3_reorder
drop cascades to view conditions_summary_daily_3
drop cascades to view _timescaledb_internal._partial_view_8
drop cascades to view _timescaledb_internal._direct_view_8
drop cascades to view _timescaledb_internal._partial_view_10
drop cascades to view _timescaledb_internal._direct_view_10
drop cascades to view conditions_summary_daily_3_reorder
drop cascades to view _timescaledb_internal._partial_view_9
drop cascades to view _timescaledb_internal._direct_view_9
drop cascades to view _timescaledb_internal._partial_view_11
drop cascades to view _timescaledb_internal._direct_view_11
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_3_29_chunk
drop cascades to table _timescaledb_internal._hyper_3_30_chunk
Expand All @@ -370,8 +387,11 @@ NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_8_39_chunk
drop cascades to table _timescaledb_internal._hyper_8_40_chunk
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_10_43_chunk
drop cascades to table _timescaledb_internal._hyper_10_44_chunk
DETAIL: drop cascades to table _timescaledb_internal._hyper_9_41_chunk
drop cascades to table _timescaledb_internal._hyper_9_42_chunk
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table _timescaledb_internal._hyper_11_45_chunk
drop cascades to table _timescaledb_internal._hyper_11_46_chunk
DROP TABLE devices CASCADE;
NOTICE: drop cascades to view devices_view
DROP TABLE conditions_dup CASCADE;
Expand Down

0 comments on commit e09d667

Please sign in to comment.