如何在golang中更新bigquery行

时间:2018-06-25 09:00:19

标签: go google-bigquery gcloud

我有一个连接到bigquery表的go程序。这是表的架构:

name    STRING  NULLABLE    
age     INTEGER NULLABLE    
amount  INTEGER NULLABLE

我已成功查询此表的数据并使用以下代码在控制台上打印了所有行:

ctx := context.Background()
client, err := bigquery.NewClient(ctx, projectID)

q := client.Query("SELECT * FROM test.test_user LIMIT 1000")

it, err := q.Read(ctx)
if err != nil {
    log.Fatal(err)
}
    for {
        var values []bigquery.Value
        err := it.Next(&values)
        if err == iterator.Done {
            break
        }
        if err != nil {
            // TODO: Handle error.
        }
            fmt.Println(values)
    }

我还成功使用以下代码从结构中的表上插入了数据:

type test struct {
    Name   string
    Age    int
    Amount int
}
u := client.Dataset("testDS").Table("test_user").Uploader()

savers := []*bigquery.StructSaver{
    {Struct: test{Name: "Jack", Age: 23, Amount:123}, InsertID: "id1"},
}

if err := u.Put(ctx, savers); err != nil {
    log.Fatal(err)
}
fmt.Printf("rows inserted!!")

现在,我没能做的就是更新行。我想做的是选择所有行并用一个操作更新所有行(例如:amount = amount * 2)

如何使用golang做到这一点?

1 个答案:

答案 0 :(得分:2)

更新行并不特定于Go或任何其他客户端库。如果要在BigQuery中更新数据,则需要通过SQL使用DML(数据操作语言)。因此,基本上,您已经有主要部分在运行(运行查询)-您只需要更改此SQL以使用DML。

但是,请注意:BigQuery是OLAP服务。不要将其用于OLTP。另外,还有quotas个使用DML。确保您熟悉它们。