Gorm:使用数组列批量插入 ClickHouse
Gorm: Batch insert into ClickHouse with Array columns
我想批量插入数据到我们的 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)
错误:[error] unsupported data type: &[]
只有当我准备一个语句并保存数据时它才有效。但是,在那种情况下,它不再是批量插入
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)
我想批量插入数据到我们的 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)
错误:[error] unsupported data type: &[]
只有当我准备一个语句并保存数据时它才有效。但是,在那种情况下,它不再是批量插入
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)