{"record":{"id":"e804c2405876e1c8","repo":"SigNoz/signoz","slug":"noop-is-not-supported-for-table-view","errorCode":null,"errorMessage":"noop is not supported for table view","messagePattern":"noop is not supported for table view","errorType":"validation","errorClass":null,"httpStatus":400,"severity":"error","filePath":"pkg/query-service/app/metrics/v3/cumulative_table.go","lineNumber":182,"sourceCode":"\t\tquery = 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)\n\t\tvalue := aggregateOperatorToPercentile[mq.AggregateOperator]\n\n\t\tquery = 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)\n\t\treturn query, nil\n\tcase v3.AggregateOperatorAvg, v3.AggregateOperatorSum, v3.AggregateOperatorMin, v3.AggregateOperatorMax:\n\t\top := fmt.Sprintf(\"%s(value)\", aggregateOperatorToSQLFunc[mq.AggregateOperator])\n\t\tquery := fmt.Sprintf(queryTmpl, groupTags, op, filterSubQuery, groupBy, orderBy)\n\t\treturn query, nil\n\tcase v3.AggregateOperatorCount:\n\t\top := \"toFloat64(count(*))\"\n\t\tquery := fmt.Sprintf(queryTmpl, groupTags, op, filterSubQuery, groupBy, orderBy)\n\t\treturn query, nil\n\tcase v3.AggregateOperatorCountDistinct:\n\t\top := \"toFloat64(count(distinct(value)))\"\n\t\tquery := fmt.Sprintf(queryTmpl, groupTags, op, filterSubQuery, groupBy, orderBy)\n\t\treturn query, nil\n\tcase v3.AggregateOperatorNoOp:\n\t\treturn \"\", fmt.Errorf(\"noop is not supported for table view\")\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unsupported aggregate operator\")\n\t}\n}\n","sourceCodeStart":164,"sourceCodeEnd":187,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/app/metrics/v3/cumulative_table.go#L164-L187","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\n{\"aggregateOperator\":\"noop\",\"queryType\":\"table\"}\n// after\n{\"aggregateOperator\":\"avg\",\"queryType\":\"table\"}","handlingStrategy":"validation","validationCode":"if queryType == \"table\" && aggregateOperator == \"noop\" {\n  return errors.New(\"noop is not supported for table view; choose an aggregator\")\n}","typeGuard":"func isNoopTableQuery(q Query) bool { return q.QueryType == \"table\" && q.AggregateOperator == \"noop\" }","tryCatchPattern":"Catch the API error in panel save logic and force the user to pick an aggregator before retry.","preventionTips":["Never leave AggregateOperator defaulted/zero-valued in request structs","Block noop in table panel UI","Add contract tests for operator/query-type matrix"],"tags":["signoz","metrics","aggregate-operator","table-view"],"backgroundTag":"unsupported-aggregate-operator","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}