q := i.client.Query(query)
job, err := q.Run(ctx)
if err != nil {
<handle>
}
status, err := job.Wait(ctx)
if err != nil {
<handle>
}
if err = status.Err(); err != nil {
<handle>
}
it, err := job.Read(ctx)
if err != nil {
<handle>
}
以下是我用来查询BigQuery表的代码。其中client
字段是*bigquery.Client
类型。
查询本身非常简单,如下所示:
SELECT field, another_field from some_table LIMIT K OFFSET N
我知道这种类型的分页不是BQ的最佳实践,但这是另外一个讨论的主题。
与在GUI中查询相比,此Run
调用需要2-4秒钟而不是几百毫秒。
可能出了什么问题?官方包文档使用与此相同或更多的方法来与BigQuery交互(有时会跳过Wait
部分)。
编辑:
事实证明,仅使用Query.Read()
速度要快得多:等待作业的时间从3-4秒减少到1秒。
话虽如此,它仍然比GUI慢得多 :)