diff --git a/pkg/querier/querier.go b/pkg/querier/querier.go index 2046763e6973..997a4bf7731c 100644 --- a/pkg/querier/querier.go +++ b/pkg/querier/querier.go @@ -1113,13 +1113,16 @@ func (q *SingleTenantQuerier) DetectedFields(ctx context.Context, req *logproto. level.Warn(q.logger).Log("msg", "failed to marshal hyperloglog sketch", "err", err) continue } - + p := v.parsers + if len(p) == 0 { + p = nil + } fields[fieldCount] = &logproto.DetectedField{ Label: k, Type: v.fieldType, Cardinality: v.Estimate(), Sketch: sketch, - Parsers: v.parsers, + Parsers: p, } fieldCount++ diff --git a/pkg/querier/querier_test.go b/pkg/querier/querier_test.go index 6bb83b453906..eb8b8c3a9754 100644 --- a/pkg/querier/querier_test.go +++ b/pkg/querier/querier_test.go @@ -1959,8 +1959,8 @@ func TestQuerier_DetectedFields(t *testing.T) { assert.Equal(t, []string{"logfmt"}, durationField.Parsers) assert.Equal(t, []string{"logfmt"}, floatField.Parsers) assert.Equal(t, []string{"logfmt"}, evenField.Parsers) - assert.Equal(t, []string{}, constantField.Parsers) - assert.Equal(t, []string{}, variableField.Parsers) + assert.Equal(t, []string(nil), constantField.Parsers) + assert.Equal(t, []string(nil), variableField.Parsers) }, ) diff --git a/pkg/storage/detected/fields.go b/pkg/storage/detected/fields.go index 9d6a699bc1e1..8dd9dd1a1512 100644 --- a/pkg/storage/detected/fields.go +++ b/pkg/storage/detected/fields.go @@ -44,6 +44,9 @@ func (f *UnmarshaledDetectedField) Merge(df *logproto.DetectedField) error { f.Parsers = append(f.Parsers, df.Parsers...) slices.Sort(f.Parsers) f.Parsers = slices.Compact(f.Parsers) + if len(f.Parsers) == 0 { + f.Parsers = nil + } return f.Sketch.Merge(sketch) }