鉴于 SQL 在查询编辑器中运行良好。仍然在将其分配给结构之后,数据似乎具有不同的值。为什么会这样?var RunQuery = func(req *http.Request, query string)(*bigquery.RowIterator, error){ ctx := appengine.NewContext(req) ctxWithDeadline, _ := context.WithTimeout(ctx, 30*time.Minute) bqClient, bqErr := bigquery.NewClient(ctxWithDeadline, project, option.WithCredentialsFile(serviceAccount)) if bqErr != nil { log.Errorf(ctx, "%v", bqErr) return nil, bqErr } q := bqClient.Query(query) job, err := q.Run(ctx) if err != nil { log.Errorf(ctx, "%v", err) return nil, err } status, err := job.Wait(ctx) if err != nil { log.Errorf(ctx, "%v", err) return nil, err } if err := status.Err(); err != nil { log.Errorf(ctx, "%v", err) return nil, err } it, err := job.Read(ctx) if err != nil { log.Errorf(ctx, "%v", err) return nil, err } log.Infof(ctx, "Total Rows: %v", it.TotalRows) return it, nil}type Customers struct { CustomerName string `bigquery:"customer_name"` CustomerAge int `bigquery:"customer_age"`}var rowsRead intfunc main() { query := `SELECT name as customer_name, age as customer_age FROM customer_table WHERE customerStatus = '0'` customerInformation, customerInfoErr := RunQuery(req, query, false) if customerInfoErr != nil { log.Errorf(ctx, "Fetching customer information error :: %v", customerInfoErr) return }假设我有查询结果, customer_name|customer_age cat | 2 dog | 3 horse | 10但是在将其分配给结构后,结果是 customer_name|customer_age "" | 2 dog | "" "" | ""为什么会这样?我什至在我将限制设置为 1000 的块上对其进行了测试,结果仍然相同。但是查询编辑器中的查询结果是我所期望的
2 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
从文档中:
如果 dst 是指向结构的指针,则架构中的每一列都将与结构中具有相同名称的导出字段匹配,忽略大小写。不匹配的架构列和结构字段将被忽略。
在这里,您尝试将 customer_age 解析为名为 CustomerAge 的结构属性。如果您将其更新为 Customer_Age 或 customer_age 它应该可以工作。
慕村225694
TA贡献1880条经验 获得超4个赞
使用Value Loader bigquery.Value. 而不是在映射查询结果时使用预期的结构。用过map[string]bigquery.Value。仍然不知道为什么使用预期结构映射查询结果不能正常工作。这是我的解决方案。
for {
row := make(map[string]bigquery.Value)
err := customerInformation.Next(&row)
log.Infof(ctx, "row %v", row)
if err == iterator.Done {
log.Infof(ctx, "ITERATION COMPLETE. Rows read %v", rowsRead)
break
}
rowsRead++
}
- 2 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消