0

appengine から実行しているクエリに対して、まったく予期しない応答を受け取りました。

BigQuery ドキュメントに従って期待される種類の「bigquery#queryResults」の応答の代わりに、私は取得しています

u'basePath': u'/bigquery/v2/', u'kind': u'discovery#restDescription',....

これは、10 ~ 15 秒以上かかるクエリでのみ発生するようです。これは、Appengine の動的な 60 秒のタイムアウトとの奇妙な相互作用であると思われます。

私はpython27で実行しており、リクエストにgoogle-api-python-clientを使用しています。

アップデート

他のいくつかのシナリオを試しました:

  • バックエンドで実行 - appengine リクエストのタイムアウトが適用されない場所 - 同じこと: リクエストに ~9.8 秒、検出 json が返されます

  • 確かに、dev(localhost)で再度実行しました:すべて問題ありません

  • 最も興味深いのは、 (以前の 35 秒ではなく) 4 秒の短いタイムアウトで実行すると、同じ 9.8 秒間隔の後に同じ検出応答が返されることです。

4

2 に答える 2

0

App Engineクォータ ドキュメントから:

Each incoming HTTP request can be no larger than 32MB.

クエリが 32 MB を超えるデータを返す可能性があり、これが HTTP 500 エラーを引き起こし、API が上記の出力を提供することになります (これは BigQuery API Discovery のドキュメント情報です。この応答は、 Python クライアント ライブラリが App Engine でエラー レスポンスを処理する方法に関する別の問題)。

推奨される回避策: クエリの応答で大量のデータが返される場合は、maxResultsパラメーターを使用して、応答ページで返される行の量をより少ない量に制限できます。次に、API を連続して呼び出して、後続のページのデータを取得できます。

于 2012-11-29T21:27:08.100 に答える
0

これは、基礎となる httplib2 ライブラリーの既知の修正済みバグです。

バージョン 0.8 以降を使用していることを確認します。

httplib2/__init__.pyで確認してください:

__version__ = "0.8"
于 2013-05-20T20:58:24.853 に答える