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 上的表

如何使用 BigQuery 计算 GitHub 上的推送事件?

访问 BigQuery 上的公共数据集