我有一个用Go编写的aws lambda,应该插入到bigquery中。它引用了cloud.google.com/go/bigquery包。
client, err := bigquery.NewClient(ctx, projectID, gcpOption)
if err != nil {
println(fmt.Sprintf("error creating new client, %v", err))
return fmt.Errorf("bigquery.NewClient: %v", err)
}
defer client.Close()
inserter := client.Dataset(datasetID).Table(tableID).Inserter()
if err := inserter.Put(ctx, items); err != nil {
println(fmt.Sprintf("error inserting, %v", err))
if multiError, ok := err.(bigquery.PutMultiError); ok {
for _, err1 := range multiError {
for _, err2 := range err1.Errors {
fmt.Println(err2)
}
}
} else {
fmt.Println(err)
}
return err
} else {
println("Inserted record")
}运行时,将插入一条记录,但再次运行将导致更新先前插入的行。这不是我所期望的行为。我对Golang和GCP比较陌生,所以可能我有错误的期望?
大查询中的表未分区。Items是一个结构数组。
发布于 2021-07-21 14:33:56
Inserter可用于实现至少一次的数据插入语义。插入机制不能向上插入行为,这似乎是您所描述的。
我不清楚您是如何验证这种行为的,但我会从另一个角度出发。
有关作为go Inserter基础的tabledata.insertAll流应用编程接口的更多信息,可以在这里找到:https://cloud.google.com/bigquery/streaming-data-into-bigquery
https://stackoverflow.com/questions/68464728
复制相似问题