首页 > 解决方案 > 将 dataType 从 bigquery.Value 更改为 string

问题描述

我将 BigQuery 与 Go 语言连接起来,如以下 API 文档所示, https://cloud.google.com/bigquery/docs/reference/libraries?hl=en_US

之后,我需要在特定的行和列中获取 sql 结果,并判断它是否等于特定的字符串。我可以将 bigquery.Value 更改为字符串吗?该怎么做?

标签: gogoogle-bigquery

解决方案


RowIterator.Next() 在此处查看如何使用。

Next 将下一行加载到 dst 中。如果没有更多结果,它的返回值为 iterator.Done。一旦 Next 返回 iterator.Done,所有后续调用都将返回 iterator.Done。

dst 可以实现 ValueLoader,也可以是 *[]Value、*map[string]Value 或结构指针。

Value是类型interface{},所以如果你确定你拥有的值是 stringstr := fmt.Sprintf("%v", row[i])应该可以工作。通常最好定义一个struct type具有代表查询结果行字段的成员(根据我上面链接的文档中的表映射的类型)并将指向它的指针指向它RowIterator.Next()而不是 slice/map of bigquery.Value

type myRow struct {
    Name string
    Num int
}

// ...
q := client.Query("select name, num from t1")
it, err := q.Read(ctx)
// handle err
for {
    // instead of: var row []bigquery.Value
    var row myRow // <-- use custom struct type here
    err := it.Next(&row)
    if err == iterator.Done {
        break
    }
    // handle err != nil
    someFuncThatTakesString(row.Name)
}

推荐阅读