GoLang的Map如何与ClickHouse的AggregateFunction相关联

zour9fqk  于 2023-06-03  发布在  Go
关注(0)|答案(1)|浏览(104)

我是一名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,但没有成功。

如果有人能在这方面抛砖引玉,那将非常有帮助

mf98qq94

mf98qq941#

AggregateFunction是ClickHouse中一个很酷的数据类型--它跟踪计算值,但允许您向其添加更多值。例如,您可以跟踪值的平均值-如果您要添加更多值,则它不仅仅是一个数字:AggregateFunction需要维护运行总数和值的计数。
50%分位数与此类似-您需要维护一组值来计算中间的第50个百分位数。我不熟悉Go,但我认为这就是为什么它使用map的原因-维护AggregationFunction的这些相同值。

相关问题