情况:
从python处理程序请求Google Bigquery时,此警告会显示六次
WARNING 2017-04-28 10:01:55,450 urlfetch_stub.py:550] Stripped prohibited headers from URLFetch request: ['content-length']
然后它提出截止日期异常或成功终止请求。
HTTPException: Deadline exceeded while waiting for HTTP response
(成功/截止日期例外比率约为2/1)
以下是我如何从python处理程序执行请求:
import uuid
from google.cloud import bigquery
client = bigquery.Client()
q = client.run_async_query(str(uuid.uuid4()),("SELECT * FROM my_table"))
q.use_legacy_sql = False
q.allowLargeResults = True
q.begin()
wait_for_job(q)
res = q.results()
问题:如何防止发生警告?
问题:查询返回的警告被GAE捕获为失败,并使处理程序重新发送查询,直到成功或截止日期异常confirmation source为止。这是有问题的,因为它会增加执行请求所需的时间。
额外信息:
在我当前的python处理程序中,我一个接一个地运行三个不同的请求。虽然根据时间发生变化,但Warning
消息的数量对于三个请求是相同的。
例如。:
请求1:3警告,然后请求2和3将有三次警告消息。
等5分钟
请求1:6警告,然后请求2和3将有六次警告消息。
答案 0 :(得分:1)
此警告出现在新的大查询客户端上。 此代码有效:
from oauth2client.contrib.appengine import AppAssertionCredentials
from apiclient.discovery import build
import httplib2
credentials = AppAssertionCredentials('https://www.googleapis.com/auth/sqlservice.admin')
http = httplib2.Http()
http = credentials.authorize(http)
service = build('bigquery', 'v2', http=http)
query = "SELECT * FROM [" + table + "]"
body = {'query': query, 'timeoutMs': 2000}
result = service.jobs().query(projectId=PROJECT_ID, body=body).execute()
答案 1 :(得分:0)
因此,GAE似乎默认剥离/修改所有出站HTTP请求的特定标头:see link here。此外,在深入了解google-cloud-python客户端库中的核心HTTP帮助程序后,默认行为似乎是添加content-length
标头:see code here。
虽然在你的情况下这些都不是理想的,但我认为它不应该是一个破坏者。我认为添加try...catch
子句应该有助于减轻痛苦,尽管您将继续在日志中显示这些错误。此外,您可以在例外e上插入print type(e)
,以便从日志中找到有关例外的更多信息。请参阅对话here