To write data, prepare a proto.Input containing columns that implement the necessary proto interfaces. You can then execute an INSERT query using c.Do.
var (
body proto.ColStr
name proto.ColStr
sevText proto.ColEnum
sevNumber proto.ColUInt8
serviceName = proto.NewLowCardinality(new(proto.ColStr))
ts = new(proto.ColDateTime64).WithPrecision(proto.PrecisionNano)
arr = new(proto.ColStr).Array()
now = time.Date(2010, 1, 1, 10, 22, 33, 345678, time.UTC)
)
// Append data to columns
for i := 0; i < 10; i++ {
body.AppendBytes([]byte("Hello"))
ts.Append(now)
name.Append("name")
sevText.Append("INFO")
sevNumber.Append(10)
arr.Append([]string{"foo", "bar", "baz"})
serviceName.Append("service")
}
input := proto.Input{
{Name: "ts", Data: ts},
{Name: "severity_text", Data: &sevText},
{Name: "severity_number", Data: sevNumber},
{Name: "body", Data: body},
{Name: "name", Data: name},
{Name: "arr", Data: arr},
}
// Execute insertion
if err := conn.Do(ctx, ch.Query{
Body: "INSERT INTO test_table_insert VALUES",
Input: input,
}); err != nil {
panic(err)
}