我是一名JavaScript开发人员,几乎没有GoLang的经验。我正试图进入OpenTelemetry,这就是为什么我一直在通过Uptrace的代码库,以了解如何在后端处理遥测数据。
我遇到了一个代码片段,我真的不能理解。
是这条线。Message
结构体有一个与ClickHouse的AggregateFunction(quantilesBFloat16(0.5), Float32)
相关的map
字段
type Measure struct {
...
Histogram map[bfloat16.T]uint64 `ch:"type:AggregateFunction(quantilesBFloat16(0.5), Float32)"`
...
}
Measure
s插入此处。
func InsertMeasures(ctx context.Context, app *bunapp.App, measures []*Measure) error {
_, err := app.CH.NewInsert().
Model(&measures).
ModelTableExpr("?", app.DistTable("measure_minutes_buffer")).
Exec(ctx)
return err
}
我无法理解键和值如何Map到Float32
。保存的是键还是值?
我所尝试的:
- 查看ClickHouse表的
histogram
列,但值是乱码。 - 在Uptrace中打开调试以查看查询并检查CH中的
query_log
表,但它不显示值。 - 尝试在添加一些日志后从源代码构建Uptrace,但没有成功。
如果有人能在这方面抛砖引玉,那将非常有帮助
1条答案
按热度按时间mf98qq941#
AggregateFunction是ClickHouse中一个很酷的数据类型--它跟踪计算值,但允许您向其添加更多值。例如,您可以跟踪值的平均值-如果您要添加更多值,则它不仅仅是一个数字:AggregateFunction需要维护运行总数和值的计数。
50%分位数与此类似-您需要维护一组值来计算中间的第50个百分位数。我不熟悉Go,但我认为这就是为什么它使用map的原因-维护AggregationFunction的这些相同值。