Golang不知道大家是否熟悉?今天我将给大家介绍《Gorm:将数组列批量插入 ClickHouse》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!
我想将数据批量插入到我们的 clickhouse 数据库中。使用gorm
,我可以轻松使用
type audit struct{
field1 string `json:"field1"`,
field2 string `json:"field2"`,
}
chdb.table(tablename).createinbatches(audits, 5)
但是,如果audit
包含如下数组字段,则其他字段的数据仍然会保存在数据库中。只有带有数组的字段(如下field1
)不会被保存。
type audit struct{
field1 []string `json:"field1"`,
field2 string `json:"field2"`,
}
chdb.table(tablename).createinbatches(audits, 5)
错误:[错误]不支持的数据类型:&[]
只有当我准备一份声明并保存数据时,它才有效。但是,在这种情况下,它不再是批量插入
sqlDB, err := db.DB()
tx, err := sqlDB.Begin()
stmt, err := tx.PrepareContext(ctx, `insert into audit_table (field1, field2) values (?, ?)`)
_, err = stmt.ExecContext(ctx, clickhouse.Array(audit.field1), audit.field2)
err = tx.Commit()
有人可以帮我解决这个问题吗?如何将数组数据批量插入 clickhouse 列?
正确答案
您可能需要 clickhouse.array
类型来插入 clickhouse.array
列
type audit struct{
field1 clickhouse.array `json:"field1"`,
field2 string `json:"field2"`,
}
audits := audit{
field1: clickhouse.array([]string{"one", "three"}),
field2: "two"
}
chdb.table(tablename).createinbatches(audits, 5)
这对我不起作用,我需要使用正确的字段标签更新我的结构,如下所示
type user struct {
timestamp time.time `gorm:"precision:6"`
name string `gorm:"type:lowcardinality(string)"`
age int8
defaultvalue string `gorm:"default:hello world"`
elapsed time.duration
nullableint *int8 `gorm:"type:nullable(int8)"`
array []string `gorm:"type:array(string)"`
}
并且可以像这样轻松地进行批量插入
// Batch Insert
user1 := User{Timestamp: time.Now(), Age: 12, Name: "Bruce Lee", Arraa: []string{"hello", "ne"}}
user2 := User{Timestamp: time.Now(), Age: 13, Name: "Feynman", Arraa: []string{"no", "me"}}
user3 := User{Timestamp: time.Now(), Age: 14, Name: "Angeliz"}
var users = []User{user1, user2, user3}
db.Create(&users)
以上就是《Gorm:将数组列批量插入 ClickHouse》的详细内容,更多关于的资料请关注编程网公众号!