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  }