diff --git a/src/promql/src/planner.rs b/src/promql/src/planner.rs index c282d25f3c..51091e89f9 100644 --- a/src/promql/src/planner.rs +++ b/src/promql/src/planner.rs @@ -541,7 +541,7 @@ impl PromPlanner { result_set.insert(matcher.value.clone()); } else { return Err(ColumnNotFoundSnafu { - col: self.ctx.table_name.clone().unwrap(), + col: matcher.value.clone(), } .build()); } @@ -550,8 +550,8 @@ impl PromPlanner { if col_set.contains(&matcher.value) { reverse_set.insert(matcher.value.clone()); } else { - return Err(ValueNotFoundSnafu { - table: self.ctx.table_name.clone().unwrap(), + return Err(ColumnNotFoundSnafu { + col: matcher.value.clone(), } .build()); } diff --git a/src/table/src/metadata.rs b/src/table/src/metadata.rs index 8e5b183f2a..e857ddf498 100644 --- a/src/table/src/metadata.rs +++ b/src/table/src/metadata.rs @@ -162,15 +162,14 @@ impl TableMeta { } pub fn field_column_names(&self) -> impl Iterator { - let columns_schemas = &self.schema.column_schemas(); - self.value_indices.iter().filter_map(|idx| { - let column = &columns_schemas[*idx]; - if column.is_time_index() { - None - } else { - Some(&column.name) - } - }) + // `value_indices` is wrong under distributed mode. Use the logic copied from DESC TABLE + let columns_schemas = self.schema.column_schemas(); + let primary_key_indices = &self.primary_key_indices; + columns_schemas + .iter() + .enumerate() + .filter(|(i, cs)| !primary_key_indices.contains(i) && !cs.is_time_index()) + .map(|(_, cs)| &cs.name) } /// Returns the new [TableMetaBuilder] after applying given `alter_kind`. diff --git a/tests/cases/distributed/tql-explain-analyze/explain.result b/tests/cases/distributed/tql-explain-analyze/explain.result index 7fb8a4384f..1dc38f1f2f 100644 --- a/tests/cases/distributed/tql-explain-analyze/explain.result +++ b/tests/cases/distributed/tql-explain-analyze/explain.result @@ -31,3 +31,41 @@ DROP TABLE test; Affected Rows: 1 +CREATE TABLE host_load1 ( + ts TIMESTAMP(3) NOT NULL, + collector STRING NULL, + host STRING NULL, + val DOUBLE NULL, + TIME INDEX (ts), + PRIMARY KEY (collector, host) +); + +Affected Rows: 0 + +-- SQLNESS REPLACE (RoundRobinBatch.*) REDACTED +-- SQLNESS REPLACE (peer-.*) REDACTED +TQL EXPLAIN host_load1{__field__="val"}; + ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | PromInstantManipulate: range=[0..0], lookback=[300000], interval=[300000], time index=[ts] | +| | PromSeriesNormalize: offset=[0], time index=[ts], filter NaN: [false] | +| | PromSeriesDivide: tags=["collector", "host"] | +| | Sort: host_load1.collector DESC NULLS LAST, host_load1.host DESC NULLS LAST, host_load1.ts DESC NULLS LAST | +| | Projection: host_load1.val, host_load1.collector, host_load1.host, host_load1.ts | +| | MergeScan [is_placeholder=false] | +| | TableScan: host_load1 projection=[ts, collector, host, val], partial_filters=[ts >= TimestampMillisecond(-300000, None), ts <= TimestampMillisecond(300000, None)] | +| physical_plan | PromInstantManipulateExec: range=[0..0], lookback=[300000], interval=[300000], time index=[ts] | +| | PromSeriesNormalizeExec: offset=[0], time index=[ts], filter NaN: [false] | +| | PromSeriesDivideExec: tags=["collector", "host"] | +| | RepartitionExec: partitioning=REDACTED +| | ProjectionExec: expr=[val@3 as val, collector@1 as collector, host@2 as host, ts@0 as ts] | +| | MergeScanExec: peers=[REDACTED +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +DROP TABLE host_load1; + +Affected Rows: 1 + diff --git a/tests/cases/distributed/tql-explain-analyze/explain.sql b/tests/cases/distributed/tql-explain-analyze/explain.sql index 58f7bcf1a6..d0f237d0aa 100644 --- a/tests/cases/distributed/tql-explain-analyze/explain.sql +++ b/tests/cases/distributed/tql-explain-analyze/explain.sql @@ -9,3 +9,18 @@ INSERT INTO test VALUES (1, 1, "a"), (1, 1, "b"), (2, 2, "a"); TQL EXPLAIN (0, 10, '5s') test; DROP TABLE test; + +CREATE TABLE host_load1 ( + ts TIMESTAMP(3) NOT NULL, + collector STRING NULL, + host STRING NULL, + val DOUBLE NULL, + TIME INDEX (ts), + PRIMARY KEY (collector, host) +); + +-- SQLNESS REPLACE (RoundRobinBatch.*) REDACTED +-- SQLNESS REPLACE (peer-.*) REDACTED +TQL EXPLAIN host_load1{__field__="val"}; + +DROP TABLE host_load1;