Google app engine 对BigQuery查询的错误响应:种类:发现#restDescription而不是BigQuery#queryResults

Google app engine 对BigQuery查询的错误响应:种类:发现#restDescription而不是BigQuery#queryResults,google-app-engine,google-bigquery,Google App Engine,Google Bigquery,我收到了一个回复,我完全不希望收到来自appengine的询问 我得到的不是bigquery文档所期望的那种“bigquery#queryResults”的响应,而是 u'basePath': u'/bigquery/v2/', u'kind': u'discovery#restDescription',.... 这似乎只发生在需要10-15秒甚至更长时间的查询中,我怀疑这是与Appengine动态60秒超时的一些奇怪的交互 我在python27上运行,并使用GoogleAPI python客

我收到了一个回复,我完全不希望收到来自appengine的询问

我得到的不是bigquery文档所期望的那种“bigquery#queryResults”的响应,而是

u'basePath': u'/bigquery/v2/', u'kind': u'discovery#restDescription',....
这似乎只发生在需要10-15秒甚至更长时间的查询中,我怀疑这是与Appengine动态60秒超时的一些奇怪的交互

我在python27上运行,并使用GoogleAPI python客户端处理请求

更新 尝试了一些其他场景:

  • 在后端运行它-没有应用appengine请求超时-同样的事情:~9.8s到请求中,发现json被返回

  • 在dev(localhost)中再次运行它,以确保:一切正常

  • 最有趣的,以较短的超时4s运行它(与之前的35s相反),在相同的9.8s间隔后会得到相同的发现回复

从应用程序引擎:

您的查询返回的数据可能大于32 MB,这会导致HTTP 500错误,导致API提供您在上面看到的输出(这是BigQuery API发现文档信息-此响应可能与Python客户端库如何处理App Engine上的错误响应有关)


建议的解决方法:如果查询响应返回大量数据,可以使用参数将响应页面中返回的行数限制为较小的行数。然后,您可以连续调用API来检索后续的数据页。

这是底层httplib2库中已知且已修复的错误

确保您使用的是0.8或更高版本:

办理登机手续:


你能给我们看看你的一些代码,也许还有一个完整的堆栈跟踪吗?这可能指向Python客户端库中的一个bug。@JasonHall您是否对某些特定的东西感兴趣?最终,它只是一个service.jobs().query(…).execute()调用,它使用server2server凭据,在其他方面工作得很好。这发生在Appengine上,而不是本地开发服务器上。我不确定您指的是哪个堆栈跟踪-我得到的不是异常,而是调用返回的结果。
discovery#restDescription
来自发现API,Python客户端在调用
build()
时使用该API生成能够调用BigQuery API的方法。因此,听起来您得到的响应似乎来自于发现API调用,而不是BigQuery调用。这是我自己发现的。问题是为什么这个响应而不是为我正在使用的API记录的响应,如果它指示错误,那么错误是什么?响应很小-它们的大小与流程数据的大小无关。
Each incoming HTTP request can be no larger than 32MB.
__version__ = "0.8"