github.com/grafana/pyroscope@v1.18.0/pkg/phlaredb/schemas/v1/strings.go (about) 1 package v1 2 3 import ( 4 "github.com/parquet-go/parquet-go" 5 6 phlareparquet "github.com/grafana/pyroscope/pkg/parquet" 7 ) 8 9 var stringsSchema = parquet.NewSchema("String", phlareparquet.Group{ 10 phlareparquet.NewGroupField("ID", parquet.Encoded(parquet.Uint(64), &parquet.DeltaBinaryPacked)), 11 phlareparquet.NewGroupField("String", parquet.Encoded(parquet.String(), &parquet.RLEDictionary)), 12 }) 13 14 type StringPersister struct{} 15 16 func (StringPersister) Name() string { return "strings" } 17 18 func (StringPersister) Schema() *parquet.Schema { return stringsSchema } 19 20 func (StringPersister) Deconstruct(row parquet.Row, s string) parquet.Row { 21 if cap(row) < 2 { 22 row = make(parquet.Row, 0, 2) 23 } 24 row = row[:0] 25 row = append(row, parquet.Int64Value(int64(0)).Level(0, 0, 0)) 26 row = append(row, parquet.ByteArrayValue([]byte(s)).Level(0, 0, 1)) 27 return row 28 } 29 30 func (StringPersister) Reconstruct(row parquet.Row) (s string, err error) { 31 return row[1].String(), nil 32 }