我正在谷歌应用引擎中从我的应用程序查询BigQuery,并有时从BQ收到一个奇怪的结果(发现#restDescription)。我花了一些时间才明白,只有当我查询的数据量很高时才会出现问题,从而使我的查询在10秒内超时。
我在这里找到了一个很好的问题描述: Bad response to a BigQuery query
再次阅读GAE文档后,我发现HTTP请求应该在a few seconds内处理。所以我想,这只是一个猜测,大问题也可能以同样的方式限制自己,因此,必须在几秒钟内响应我的查询"。
如果是这种情况,首先,我会有点惊讶,因为我的bigquery请求肯定会花费超过几秒......但无论如何,我做了一个测试,强制超时1在我的查询的第二个,然后通过轮询API调用getQueryResults来获取queryResult。
结果非常有趣。 BigQuery在3秒内返回一些东西,或多或少(不是我问的1)然后我通过轮询在26秒内得到我的结果。这看起来像是绕过了10秒的超时问题。
但我几乎没有看到自己在制作中这样做。
有人在BigQuery中遇到了同样的问题吗?当查询持续时间超过"几秒钟时,我该怎么做?
以下是我用来查询的代码:
query_config = {
'timeoutMs': 1000,
"defaultDataset": {
"datasetId": self.dataset,
"projectId": self.project_id
},
}
query_config.update(params)
result_json = (self.service.jobs()
.query(projectId=project,
body=query_config)
.execute())
为了检索结果,我用这个来调查:
self.service.jobs().getQueryResults(projectId=project,jobId=jobId).execute()
这些是BigQuery上发生的事情的日志:
2012-12-03 12:31:19.835 /api/xxxxx/ 200 4278ms 0kb Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
xx.xx.xx.xx - - [03/Dec/2012:02:31:19 -0800] "GET /api/xxxxx/ HTTP/1.1" 200 243 ....... ms=4278 cpu_ms=346 cpm_usd=0.000426 instance=00c61b117c1169753678c6d5dac736b223809b
I 2012-12-03 12:31:16.060
URL being requested: https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest?userIp=xx.xx.xx.xx
I 2012-12-03 12:31:16.061
Attempting refresh to obtain initial access_token
I 2012-12-03 12:31:16.252
URL being requested: https://www.googleapis.com/bigquery/v2/projects/xxxxxxxxxxxx/queries?alt=json
I 2012-12-03 12:31:19.426
URL being requested: https://www.googleapis.com/bigquery/v2/projects/xxxxxxxx/jobs/job_a1e74a6769f74cb997d998623b1b6b2e?alt=json
I 2012-12-03 12:31:19.500
这是我的查询API调用返回给我的内容。在元数据中,状态是“运行”:
{u'kind': u'bigquery#queryResponse', u'jobComplete': False, u'jobReference': {u'projectId': u'xxxxxxxxxxx', u'jobId': u'job_a1e74a6769f74cb997d998623b1b6b2e'}}
使用jobId我可以在26秒后检索结果,当它们准备就绪时。
必须有另一种方式!我做错了什么?