From 1ca2dbd240cd949e2c4e05bf3936c607baf000c2 Mon Sep 17 00:00:00 2001 From: Yingwen Date: Wed, 7 May 2025 16:08:51 +0800 Subject: [PATCH] fix: reset tags when creating an empty metric in prom call (#6056) * Revert "chore: remove debug logs" This reverts commit f73f3a7373c83db974d8ed80cb47f5f87317b490. * chore: more logs * fix: reset tags and fields * test: add binary time fn test * chore: remove logs * test: sort result --- src/query/src/promql/planner.rs | 3 + .../common/promql/binary_time_fn.result | 63 +++++++++++++++++++ .../common/promql/binary_time_fn.sql | 47 ++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 tests/cases/standalone/common/promql/binary_time_fn.result create mode 100644 tests/cases/standalone/common/promql/binary_time_fn.sql diff --git a/src/query/src/promql/planner.rs b/src/query/src/promql/planner.rs index 9f5d67a578..2869a2201b 100644 --- a/src/query/src/promql/planner.rs +++ b/src/query/src/promql/planner.rs @@ -761,6 +761,8 @@ impl PromPlanner { } else { self.ctx.time_index_column = Some(SPECIAL_TIME_FUNCTION.to_string()); self.ctx.reset_table_name_and_schema(); + self.ctx.tag_columns = vec![]; + self.ctx.field_columns = vec![DEFAULT_FIELD_COLUMN.to_string()]; LogicalPlan::Extension(Extension { node: Arc::new( EmptyMetric::new( @@ -2828,6 +2830,7 @@ impl PromPlanner { let project_fields = non_field_columns_iter .chain(field_columns_iter) .collect::>>()?; + LogicalPlanBuilder::from(input) .project(project_fields) .context(DataFusionPlanningSnafu)? diff --git a/tests/cases/standalone/common/promql/binary_time_fn.result b/tests/cases/standalone/common/promql/binary_time_fn.result new file mode 100644 index 0000000000..6c3cfb1022 --- /dev/null +++ b/tests/cases/standalone/common/promql/binary_time_fn.result @@ -0,0 +1,63 @@ +CREATE TABLE IF NOT EXISTS `test_metric` ( + `asset` STRING NULL, + `attribute` STRING NULL, + `timestamp` TIMESTAMP(3) NOT NULL, + `value` DOUBLE NULL, + `measurement` STRING NULL, + TIME INDEX (`timestamp`), + PRIMARY KEY (`asset`, `attribute`, `measurement`) +); + +Affected Rows: 0 + +-- Saturday 2023-10-28 +-- Sunday 2023-10-29 +INSERT INTO test_metric (asset, attribute, measurement, `timestamp`, `value`) +VALUES +('Generator01', 'voltage', 'electrical', '2023-10-23 00:00:00', 220.5), +('Generator01', 'current', 'electrical', '2023-10-23 06:00:00', 15.2), +('Generator02', 'voltage', 'electrical', '2023-10-23 12:00:00', 219.8), +('Generator02', 'current', 'electrical', '2023-10-23 18:00:00', 14.9), +('Generator01', 'voltage', 'electrical', '2023-10-24 00:00:00', 221.3), +('Generator01', 'current', 'electrical', '2023-10-24 06:00:00', 15.4), +('Generator02', 'voltage', 'electrical', '2023-10-24 12:00:00', 220.1), +('Generator02', 'current', 'electrical', '2023-10-24 18:00:00', 15.0), +('Generator01', 'voltage', 'electrical', '2023-10-25 00:00:00', 219.7), +('Generator01', 'current', 'electrical', '2023-10-25 06:00:00', 15.3), +('Generator02', 'voltage', 'electrical', '2023-10-25 12:00:00', 220.5), +('Generator02', 'current', 'electrical', '2023-10-25 18:00:00', 15.1), +('Generator01', 'voltage', 'electrical', '2023-10-26 00:00:00', 220.2), +('Generator01', 'current', 'electrical', '2023-10-26 06:00:00', 15.5), +('Generator02', 'voltage', 'electrical', '2023-10-26 12:00:00', 219.9), +('Generator02', 'current', 'electrical', '2023-10-26 18:00:00', 14.8), +('Generator01', 'voltage', 'electrical', '2023-10-27 00:00:00', 220.9), +('Generator01', 'current', 'electrical', '2023-10-27 06:00:00', 15.6), +('Generator02', 'voltage', 'electrical', '2023-10-27 12:00:00', 220.3), +('Generator02', 'current', 'electrical', '2023-10-27 18:00:00', 15.2), +('Generator01', 'voltage', 'electrical', '2023-10-28 00:00:00', 218.5), +('Generator01', 'current', 'electrical', '2023-10-28 06:00:00', 14.9), +('Generator02', 'voltage', 'electrical', '2023-10-28 12:00:00', 219.4), +('Generator02', 'current', 'electrical', '2023-10-28 18:00:00', 14.7), +('Generator01', 'voltage', 'electrical', '2023-10-29 00:00:00', 219.1), +('Generator01', 'current', 'electrical', '2023-10-29 06:00:00', 14.8), +('Generator02', 'voltage', 'electrical', '2023-10-29 12:00:00', 220.0), +('Generator02', 'current', 'electrical', '2023-10-29 18:00:00', 14.6); + +Affected Rows: 28 + +-- SQLNESS SORT_RESULT 3 1 +tql eval(1697731200, 1698595200, 120) max_over_time(test_metric[30s]) > 100 and on () (day_of_week() == 0 or day_of_week() == 6); + ++---------------------+-------------------------------------------+-------------+-----------+-------------+ +| timestamp | prom_max_over_time(timestamp_range,value) | asset | attribute | measurement | ++---------------------+-------------------------------------------+-------------+-----------+-------------+ +| 2023-10-28T00:00:00 | 218.5 | Generator01 | voltage | electrical | +| 2023-10-28T12:00:00 | 219.4 | Generator02 | voltage | electrical | +| 2023-10-29T00:00:00 | 219.1 | Generator01 | voltage | electrical | +| 2023-10-29T12:00:00 | 220.0 | Generator02 | voltage | electrical | ++---------------------+-------------------------------------------+-------------+-----------+-------------+ + +DROP TABLE test_metric; + +Affected Rows: 0 + diff --git a/tests/cases/standalone/common/promql/binary_time_fn.sql b/tests/cases/standalone/common/promql/binary_time_fn.sql new file mode 100644 index 0000000000..e17d6664d9 --- /dev/null +++ b/tests/cases/standalone/common/promql/binary_time_fn.sql @@ -0,0 +1,47 @@ +CREATE TABLE IF NOT EXISTS `test_metric` ( + `asset` STRING NULL, + `attribute` STRING NULL, + `timestamp` TIMESTAMP(3) NOT NULL, + `value` DOUBLE NULL, + `measurement` STRING NULL, + TIME INDEX (`timestamp`), + PRIMARY KEY (`asset`, `attribute`, `measurement`) +); + +-- Saturday 2023-10-28 +-- Sunday 2023-10-29 +INSERT INTO test_metric (asset, attribute, measurement, `timestamp`, `value`) +VALUES +('Generator01', 'voltage', 'electrical', '2023-10-23 00:00:00', 220.5), +('Generator01', 'current', 'electrical', '2023-10-23 06:00:00', 15.2), +('Generator02', 'voltage', 'electrical', '2023-10-23 12:00:00', 219.8), +('Generator02', 'current', 'electrical', '2023-10-23 18:00:00', 14.9), +('Generator01', 'voltage', 'electrical', '2023-10-24 00:00:00', 221.3), +('Generator01', 'current', 'electrical', '2023-10-24 06:00:00', 15.4), +('Generator02', 'voltage', 'electrical', '2023-10-24 12:00:00', 220.1), +('Generator02', 'current', 'electrical', '2023-10-24 18:00:00', 15.0), +('Generator01', 'voltage', 'electrical', '2023-10-25 00:00:00', 219.7), +('Generator01', 'current', 'electrical', '2023-10-25 06:00:00', 15.3), +('Generator02', 'voltage', 'electrical', '2023-10-25 12:00:00', 220.5), +('Generator02', 'current', 'electrical', '2023-10-25 18:00:00', 15.1), +('Generator01', 'voltage', 'electrical', '2023-10-26 00:00:00', 220.2), +('Generator01', 'current', 'electrical', '2023-10-26 06:00:00', 15.5), +('Generator02', 'voltage', 'electrical', '2023-10-26 12:00:00', 219.9), +('Generator02', 'current', 'electrical', '2023-10-26 18:00:00', 14.8), +('Generator01', 'voltage', 'electrical', '2023-10-27 00:00:00', 220.9), +('Generator01', 'current', 'electrical', '2023-10-27 06:00:00', 15.6), +('Generator02', 'voltage', 'electrical', '2023-10-27 12:00:00', 220.3), +('Generator02', 'current', 'electrical', '2023-10-27 18:00:00', 15.2), +('Generator01', 'voltage', 'electrical', '2023-10-28 00:00:00', 218.5), +('Generator01', 'current', 'electrical', '2023-10-28 06:00:00', 14.9), +('Generator02', 'voltage', 'electrical', '2023-10-28 12:00:00', 219.4), +('Generator02', 'current', 'electrical', '2023-10-28 18:00:00', 14.7), +('Generator01', 'voltage', 'electrical', '2023-10-29 00:00:00', 219.1), +('Generator01', 'current', 'electrical', '2023-10-29 06:00:00', 14.8), +('Generator02', 'voltage', 'electrical', '2023-10-29 12:00:00', 220.0), +('Generator02', 'current', 'electrical', '2023-10-29 18:00:00', 14.6); + +-- SQLNESS SORT_RESULT 3 1 +tql eval(1697731200, 1698595200, 120) max_over_time(test_metric[30s]) > 100 and on () (day_of_week() == 0 or day_of_week() == 6); + +DROP TABLE test_metric;