SigNoz/signoz · error
unsupported operator %s
Error message
unsupported operator %s
What it means
buildTracesFilterQuery (v3 traces builder) received a filter operator that has no mapping in tracesOperatorMappingV3, so no ClickHouse SQL operator can be produced for it.
Source
Thrown at pkg/query-service/app/traces/v3/query_builder.go:190
case v3.FilterOperatorRegex, v3.FilterOperatorNotRegex:
conditions = append(conditions, fmt.Sprintf(operator, columnName, fmtVal))
case v3.FilterOperatorExists, v3.FilterOperatorNotExists:
if item.Key.IsColumn {
subQuery, err := ExistsSubQueryForFixedColumn(item.Key, item.Operator)
if err != nil {
return "", err
}
conditions = append(conditions, subQuery)
} else {
columnType, columnDataType := getClickhouseTracesColumnDataTypeAndType(item.Key)
conditions = append(conditions, fmt.Sprintf(operator, columnDataType, columnType, item.Key.Key))
}
default:
conditions = append(conditions, fmt.Sprintf("%s %s %s", columnName, operator, fmtVal))
}
} else {
return "", fmt.Errorf("unsupported operator %s", item.Operator)
}
}
}
queryString := strings.Join(conditions, " AND ")
if len(queryString) > 0 {
queryString = " AND " + queryString
}
return queryString, nil
}
func ExistsSubQueryForFixedColumn(key v3.AttributeKey, op v3.FilterOperator) (string, error) {
if key.DataType == v3.AttributeKeyDataTypeString {
if op == v3.FilterOperatorExists {
return fmt.Sprintf("%s %s ''", key.Key, tracesOperatorMappingV3[v3.FilterOperatorNotEqual]), nil
} else {
return fmt.Sprintf("%s %s ''", key.Key, tracesOperatorMappingV3[v3.FilterOperatorEqual]), nil
}View on GitHub (pinned to 5069bf80b0)
Solutions
- Use one of the v3.FilterOperator constants that exist in tracesOperatorMappingV3 (=, !=, >, >=, <, <=, contains, ncontains, in, nin, exists, nexists, like)
- Trim/lowercase operator strings before sending
- Upgrade the client to use the current v3 filter operator constants
Example fix
// before
{"operator":"neq","value":"x"}
// after
{"operator":"!=","value":"x"} Defensive patterns
Strategy: validation
Validate before calling
if _, ok := tracesOperatorMappingV3[item.Operator]; !ok {
return fmt.Errorf("unsupported operator %s", item.Operator)
} Type guard
func isSupportedTraceOp(op v3.FilterOperator) bool {
_, ok := tracesOperatorMappingV3[op]
return ok
} Prevention
- Reuse v3.FilterOperator constants, never raw strings
- Lowercase/trim operator input before validation
When it happens
Trigger: Passing an operator string not present in tracesOperatorMappingV3 (e.g. an empty operator, a typo like 'neq', or an operator only supported for logs/metrics) in a traces FilterSet.
Common situations: Copy-pasting filter JSON between log and trace queries; older clients sending operator names that were renamed across SigNoz versions.
Related errors
- invalid value for key %s: %v
- unsupported operator %s
- operator %s not supported
- filter operator %s not supported
- unsupported operator: %s
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/ae3863fa0cfdc8d3.
Report an issue: GitHub.