登录
首页 >  Golang >  Go问答

使用 go 更新/覆盖而不是插入插入到 bigquery

来源:stackoverflow

时间:2024-04-28 20:57:35 277浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《使用 go 更新/覆盖而不是插入插入到 bigquery》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我有一个用 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 是一个结构数组。


正确答案


Inserter 可用于实现至少一次数据插入语义。插入机制无法进行更新插入行为,这正是您所描述的。

我不清楚您如何验证此行为,但我会以此为起点再考虑一下。

有关作为 go Inserter 基础的 tabledata.insertAll 流 API 的更多信息,请访问:https://cloud.google.com/bigquery/streaming-data-into-bigquery

今天关于《使用 go 更新/覆盖而不是插入插入到 bigquery》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>