Cody
Cody

Reputation: 11

Change dataType from bigquery.Value to string

I connect BigQuery with Go language as the following API documentation demonstrates, https://cloud.google.com/bigquery/docs/reference/libraries?hl=en_US

After that, I need to get sql results in specific row and column, and judge if it equals a specific string. Could I change bigquery.Value to string and how to do that?

Upvotes: 1

Views: 3187

Answers (1)

blami
blami

Reputation: 7411

See how to use RowIterator.Next() here.

Next loads the next row into dst. Its return value is iterator.Done if there are no more results. Once Next returns iterator.Done, all subsequent calls will return iterator.Done.

dst may implement ValueLoader, or may be a *[]Value, *map[string]Value, or struct pointer.

Value is of type interface{} so if you are sure that value you have is string str := fmt.Sprintf("%v", row[i]) should work. It is often better to define a struct type that has members representing fields of query result row (with types mapped according to the table in documentation I linked above) and give the pointer to it to RowIterator.Next() instead of 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)
}

Upvotes: 2

Related Questions