2017-01-05 2 views
2

Nach der BigQuery-Dokumentation unter https://cloud.google.com/bigquery/querying-data#asynchronous-queries aufgeführt:BigQuery synchrone Abfrage kehrt keine Ergebnisse

Es gibt zwei Arten von über das BigQuery API abfragt. Synchron und asynchron. Async funktioniert perfekt mit dem mitgelieferten Beispielcode, synchron aber nicht.

Der Beispielcode, auf den ich Bezug nehme, wird angezeigt, wenn Sie auf den obigen Link klicken. Was ich bemerkt habe ist, dass es nicht wirklich wartet, bis die Ergebnisse verfügbar sind. Wenn ich eine time.sleep(15) vor der while True einfügen, werden meine Ergebnisse wie erwartet zurückgegeben. Wenn nicht, dann gibt es eine leere Ergebnismenge zurück.

Die offizielle Dokumentation Beispiel verwendet die Abfrage:

"""SELECT word, word_count 
    FROM `bigquery-public-data.samples.shakespeare` 
    WHERE corpus = @corpus 
    AND word_count >= @min_word_count 
    ORDER BY word_count DESC; 
    """ 

Diese Abfrage sehr schnell zurück, aber meine Abfrage dauert einige Sekunden ein Ergebnis zurück.

Meine Frage ist, warum die Dokumentation besagt, dass der run_sync_query Befehl wartet, bis die Abfrage abgeschlossen ist, wenn die Ergebnisse tatsächlich nicht verfügbar sind und keine Ergebnisse zurückgegeben werden?

Ich kann die Abfrage, die ich verwendete, nicht bereitstellen, da es sich um eine private Datenquelle handelt. Um zu produzieren, brauchen Sie nur eine Abfrage, die mehrere Sekunden dauert.

Antwort

3

Sieht aus wie die request/call is timing out, nicht die Abfrage selbst. Die Standardzeit ist 10s. Versuchen Sie, timeout_ms im Code:

enter image description here

Zum Beispiel (ich werde Sie davon ausgehen, verwenden Python):

..[auth/client setup stuff].. 

query = client.run_sync_query('<your_query>') 
query.timeout_ms = 60000 #set the request timeout 
query.use_legacy_sql = False 
query.use_query_cache = True 
query.run() 

..[do something with the results].. 
+0

Danke, ich nicht erkennen, dass diese Methode eine Timeout-Einstellung hatte. Am besten scheint immer die andere Methode zu verwenden. – user3734725

+0

@ user3734725 - cool. Kannst du bitte meine Antwort akzeptieren? –

Verwandte Themen