SigNoz/signoz · error
noop is not supported for table view
Error message
noop is not supported for table view
What it means
In the cumulative table query builder, aggregateOperator 'noop' (no aggregation, return raw sample values) is rejected for table view: a table needs one value per group, and noop provides no aggregation semantics, so SigNoz refuses to build the query rather than emit a meaningless one.
Source
Thrown at pkg/query-service/app/metrics/v3/cumulative_table.go:182
query = fmt.Sprintf(`SELECT %s toStartOfHour(now()) as ts, sum(rate_value)/%d as value FROM (%s) WHERE isNaN(rate_value) = 0 GROUP BY %s ORDER BY %s ts`, groupTags, points, query, groupBy, orderBy)
value := aggregateOperatorToPercentile[mq.AggregateOperator]
query = fmt.Sprintf(`SELECT %s toStartOfHour(now()) as ts, histogramQuantile(arrayMap(x -> toFloat64(x), groupArray(le)), groupArray(value), %.3f) as value FROM (%s) GROUP BY %s ORDER BY %s ts`, groupTagsWithoutLe, value, query, groupByWithoutLe, orderWithoutLe)
return query, nil
case v3.AggregateOperatorAvg, v3.AggregateOperatorSum, v3.AggregateOperatorMin, v3.AggregateOperatorMax:
op := fmt.Sprintf("%s(value)", aggregateOperatorToSQLFunc[mq.AggregateOperator])
query := fmt.Sprintf(queryTmpl, groupTags, op, filterSubQuery, groupBy, orderBy)
return query, nil
case v3.AggregateOperatorCount:
op := "toFloat64(count(*))"
query := fmt.Sprintf(queryTmpl, groupTags, op, filterSubQuery, groupBy, orderBy)
return query, nil
case v3.AggregateOperatorCountDistinct:
op := "toFloat64(count(distinct(value)))"
query := fmt.Sprintf(queryTmpl, groupTags, op, filterSubQuery, groupBy, orderBy)
return query, nil
case v3.AggregateOperatorNoOp:
return "", fmt.Errorf("noop is not supported for table view")
default:
return "", fmt.Errorf("unsupported aggregate operator")
}
}
View on GitHub (pinned to 5069bf80b0)
Solutions
- Pick a real aggregator for table view (sum, avg, max, min, count, count_distinct, *_rate)
- If raw values are needed, use a time-series/graph query or the raw samples endpoint
- Guard request construction: reject noop+table early with a clear client-side message
Example fix
// before
{"aggregateOperator":"noop","queryType":"table"}
// after
{"aggregateOperator":"avg","queryType":"table"} Defensive patterns
Strategy: validation
Validate before calling
if queryType == "table" && aggregateOperator == "noop" {
return errors.New("noop is not supported for table view; choose an aggregator")
} Type guard
func isNoopTableQuery(q Query) bool { return q.QueryType == "table" && q.AggregateOperator == "noop" } Try / catch
Catch the API error in panel save logic and force the user to pick an aggregator before retry.
Prevention
- Never leave AggregateOperator defaulted/zero-valued in request structs
- Block noop in table panel UI
- Add contract tests for operator/query-type matrix
When it happens
Trigger: A v3 table-view metrics query with aggregateOperator: 'noop' — e.g. migrating a trace/log panel config into a metrics table panel, or hand-crafting BuildQueryRequest payloads and leaving the default operator as noop.
Common situations: Default-initialized request structs where AggregateOperator is zero-valued/noop; dashboard JSON imported between panel types; version upgrades that started enforcing this restriction in table view.
Related errors
- CodeLicenseUnavailable
- CodeInvalidInput
- rate is not supported for table view
- CodeForbidden
- unsupported aggregate operator
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/e804c2405876e1c8.
Report an issue: GitHub.