Go

写入新数据

首先,我们需要准备一个 Series,它代表了一行数据。Series 中有三种字段类型可供使用:

KindDescription
Tag索引列,有助于更有效率地检索数据
Field值存储列, 用于数据分析、聚合、计算等
Timestamp时间戳列,每一个时序表都必须有一个时间戳列

然后,您可以将一个 Series 添加到 Metric 中,然后创建一个 InsertRequest 对象并调用 client.Insert 将数据存储到 GreptimeDB 中。

Metric 可以通过 metric.SetTimePrecision 更改 Timestamp 精度。以下是支持的选项:

PrecisionDescription
time.Second
time.Milliseconddefault
time.Microsecond
time.Nanosecond

go

  1. func Insert() {
  2. series := greptime.Series{} // Create one row of data
  3. series.AddStringTag("host", "localhost") // add index column, for query efficiency
  4. series.AddFloatField("cpu", 0.90) // add value column
  5. series.AddIntField("memory", 1024) // add value column
  6. series.SetTimestamp(time.Now()) // requird
  7. metric := greptime.Metric{} // Create a Metric and add the Series
  8. metric.AddSeries(series)
  9. // metric.SetTimePrecision(time.Second) // default is Millisecond
  10. // metric.SetTimestampAlias("timestamp") // default is 'ts'
  11. // Create an InsertRequest using fluent style
  12. // the specified table will be created automatically if it's not exist
  13. insertRequest := greptime.InsertRequest{}
  14. // if you want to specify another database, you can specify it via: `WithDatabase(database)`
  15. insertRequest.WithTable("monitor").WithMetric(metric) // .WithDatabase(database)
  16. // Fire the real Insert request and Get the affected number of rows
  17. n, err := client.Insert(context.Background(), insertRequest)
  18. if err != nil {
  19. fmt.Printf("fail to insert, err: %+v\n", err)
  20. return
  21. }
  22. fmt.Printf("AffectedRows: %d\n", n)
  23. }