Go Bigquery 上的 DEADLINE_EXCEEDED
Posted
技术标签:
【中文标题】Go Bigquery 上的 DEADLINE_EXCEEDED【英文标题】:DEADLINE_EXCEEDED on Go Bigquery 【发布时间】:2017-04-11 07:17:05 【问题描述】:我们的应用在访问 Big Query 时有时会看到 DEADLINE_EXCEEDED。
import (
"cloud.google.com/go/bigquery"
"golang.org/x/net/context"
"google.golang.org/api/option"
)
func MyFunc(ctx context.Context)
:
client, err := bigquery.NewClient(ctx, PROJECT_ID, option.WithServiceAccountFile(SERVICE_ACCOUNT_JSON_FILE_PATH))
query := client.Query("SELECT * FROM ....")
it, err := query.Read(ctx)
var list []MyStruct
for
var m MyStruct
err := it.Next(&m)
if err == iterator.Done
break
if err != nil
<Error Handling>
list = append(list, m)
:
有时我们会看到此错误。
Get https://www.googleapis.com/bigquery/v2/projects/myproject/queries/job_zandIeLwH0s8f3FAQ_ORC0zau14?alt=json\u0026startIndex=0\u0026timeoutMs=60000: API error 5 (urlfetch: DEADLINE_EXCEEDED): ('The read operation timed out',)"
看起来超时是 5 秒,但我找不到如何更改超时秒数。
我看了this post,我修改了我的源代码如下。
ctx_with_deadline, _ := context.WithTimeout(ctx, 1*time.Minute)
httpClient := &http.Client
Transport: &oauth2.Transport
Base: &urlfetch.TransportContext: ctx_with_deadline,
,
client, err := bigquery.NewClient(ctx, PROJECT_ID, option.WithServiceAccountFile(SERVICE_ACCOUNT_JSON_FILE_PATH), option.WithHTTPClient(httpClient))
然后我遇到了这个错误。
Post https://www.googleapis.com/bigquery/v2/projects/myproject/jobs?alt=json: oauth2: Transport's Source is nil
如何在 Go Bigquery 中更改超时?
【问题讨论】:
你不应该将ctx_with_deadline
也用于 bigquery.NewClient 吗?
@AlexEfimov 它看起来包选项没有截止日期选项。
我的意思是喜欢client, err := bigquery.NewClient(ctx_with_deadline, PROJECT_ID, option.WithServiceAccountFile(SERVICE_ACCOUNT_JSON_FILE_PATH), option.WithHTTPClient(httpClient))
@AlexEfimov 谢谢!有效。你能回答我的问题吗?我会接受的。
【参考方案1】:
在创建 bigquery 客户端的新实例时也使用 ctx_with_deadline
:
client, err := bigquery.NewClient(ctx_with_deadline, PROJECT_ID, option.WithServiceAccountFile(SERVICE_ACCOUNT_JSON_FILE_PATH), option.WithHTTPClient(httpClient))
【讨论】:
以上是关于Go Bigquery 上的 DEADLINE_EXCEEDED的主要内容,如果未能解决你的问题,请参考以下文章
SSL:GAE/Go 上的 CERTIFICATE_VERIFY_FAILED
Go Iterator 从 Bigquery 读取 100 万行,比 Java 或 kotlin 慢 10 倍?
BigQuery 上的提取作业不能确保 Google 存储上的文件
使用 APP 脚本上的 API 访问 BigQuery 上的表