Paginierung mit der BigQuery API verwenden
In diesem Dokument wird beschrieben, wie Sie Tabellendaten und Abfrageergebnisse in großen Datasets mithilfe der Paginierung mit der BigQuery API lesen.
Bei der Paginierung wird ein großes Dataset in kleinere Abschnitte unterteilt, die als Seiten bezeichnet werden. Bei den meisten Nutzern wird dieser Prozess automatisch von den Cloud-Clientbibliotheken übernommen. Sie können die Paginierung jedoch auch manuell für bestimmte Anwendungsfälle wie Webanwendungen steuern.
Automatische Paginierung verwenden
Die Cloud-Clientbibliotheken verarbeiten die Low-Level-Details der API-Paginierung und bieten eine Iterator-ähnliche Erfahrung. Wenn Sie Ergebnisse durchlaufen, ruft die Bibliothek automatisch die nächste Seite mit Daten ab, wenn sie benötigt wird.
Die folgenden Beispiele zeigen, wie Sie BigQuery-Tabellendaten automatisch durchlaufen.
C#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
PHP
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von PHP in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery PHP API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Ruby
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Ruby in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Ruby API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Seitengröße steuern
Sie können die maximale Anzahl von Zeilen angeben, die in jeder Netzwerkanfrage zurückgegeben werden, indem Sie eine Seitengröße festlegen. Das Festlegen der Seitengröße ist nützlich, um die Netzwerknutzung zu optimieren oder Daten in den Speicher zu passen.
In den meisten Clientbibliotheken können Sie den Parameter max_results oder page_size verwenden, wenn Sie Methoden wie list_rows oder query aufrufen.
Manuelle Paginierung mit Seitentokens verwenden
Die manuelle Paginierung ist nützlich für zustandslose Anwendungen wie einen Webdienst, bei dem ein Nutzer auf Weiter klickt, um die nächsten Ergebnisse zu sehen. In diesem Szenario verwaltet der Server zwischen Anfragen keinen aktiven Iterator.
Stattdessen verwenden Sie ein Seitentoken:
- Seite anfordern Rufen Sie die API auf und erhalten Sie zusammen mit den Zeilen einen
pageToken-Parameter. - Fortsetzen Übergeben Sie in der nächsten Anfrage denselben
pageToken-Parameter zurück an BigQuery, um den nächsten Datenblock abzurufen.
Die folgenden Beispiele zeigen, wie Sie ein Seitentoken abrufen und damit die nächste Seite mit Abfrageergebnissen abrufen.
API
Lesen Sie das Feld jobs.config.query.destinationTable, um die Tabelle zu bestimmen, in die Abfrageergebnisse geschrieben wurden.
Rufen Sie tabledata.list auf, um die Abfrageergebnisse zu lesen.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Verwenden Sie einen GetQueryResults-Job und legen Sie die Option pageSize des QueryResultsOption-Objekts, das Sie übergeben, wie im folgenden Beispiel gezeigt, fest, um die Anzahl der auf jeder Seite zurückgegebenen Zeilen festzulegen.
TableResult result = job.getQueryResults();
QueryResultsOption queryResultsOption = QueryResultsOption.pageSize(20);
TableResult result = job.getQueryResults(queryResultsOption);
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Die Methode QueryJob.result gibt einen iterierbaren Wert der Abfrageergebnisse zurück. Sie haben folgende Alternativen:
- Lesen Sie das Attribut
QueryJob.destination. Wenn dieses Attribut nicht konfiguriert ist, wird es von der API auf einen Verweis auf eine temporäre anonyme Tabelle festgelegt. - Rufen Sie das Tabellenschema mit der Methode
Client.get_tableauf. - Erstellen Sie mit der Methode
Client.list_rowseinen iterierbaren Wert für alle Zeilen in der Zieltabelle.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Python-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Mit ETags optimieren
Wenn Sie unter Verwendung von im Cache gespeicherten Werten für pageToken zurückblättern oder zu beliebigen Seiten springen, besteht die Möglichkeit, dass sich die Daten auf den Seiten seit der letzten Anzeige geändert haben. Zur Umgehung dieses Problems verwenden Sie das Attribut etag.
Jede collection.list-Methode (mit Ausnahme von Tabledata) gibt das Attribut etag im Ergebnis zurück. Dieses Attribut ist ein Hash der Seitenergebnisse und kann verwendet werden, um zu prüfen, ob sich die Seite seit der letzten Anfrage geändert hat. Wenn Sie eine Anfrage in BigQuery mit einem ETag-Wert ausführen, vergleicht BigQuery den ETag-Wert mit dem ETag-Wert, der von der API zurückgegeben wird. Die Antwort fällt auf Basis der Übereinstimmung der ETag-Werte aus. Sie können ETags verwenden, um redundante Listenaufrufe zu vermeiden:
- Wenn Sie Werte nur zurückgeben möchten, wenn sie sich geändert haben, führen Sie einen Listenaufruf mit einem zuvor gespeicherten ETag durch. Verwenden Sie dazu den HTTP-Header
If-None-Match. Wenn die ETags übereinstimmen, gibt BigQuery den StatuscodeHTTP 304 Not Modifiedund keine Daten zurück, wodurch Bandbreite gespart wird. - Wenn Sie Werte nur zurückgeben möchten, wenn sie sich nicht geändert haben, verwenden Sie den HTTP-Header
If-Match. BigQuery gibt ein412 Precondition Failedzurück, wenn sich die Seite geändert hat.
Referenz: API-Limits und ‑Kriterien
Bei allen Methoden vom Typ *collection*.list werden unter bestimmten Umständen Ergebnisse auf mehreren Seiten zurückgegeben. Das Attribut maxResults begrenzt die Anzahl der Ergebnisse pro Seite.
| Methode | Paginierungskriterien | Standardlimit für maxResults |
Höchstgrenze für maxResults |
Höchstgrenze für maxFieldValues |
|---|---|---|---|---|
tabledata.list |
Gibt Ergebnisse mit Seitenumbrüchen zurück, wenn die Antwortgröße mehr als 10 MB1 an Daten oder mehr als maxResults Zeilen enthält. |
Unbegrenzt | Unbegrenzt | Unbegrenzt |
Alle anderen *collection*.list-Methoden |
Gibt Ergebnisse mit Seitenumbrüchen zurück, wenn die Antwort mehr als maxResults Zeilen und außerdem die Höchstgrenze überschreitet. |
10.000 | Unbegrenzt | 300.000 |
Wenn das Ergebnis größer als das Byte- oder Feldlimit ist, wird das Ergebnis gekürzt, um das Limit zu erreichen. Wenn eine Zeile das Byte- oder Feldlimit überschreitet, kann die tabledata.list-Methode bis zu 100 MB Daten zurückgeben1. Dies entspricht der maximalen Zeilengröße für Abfrageergebnisse.
Es gibt keine Mindestgröße pro Seite. Einige Seiten geben möglicherweise mehr Zeilen als andere zurück.
Die jobs.getQueryResults REST API-Methode kann 20 MB Daten zurückgeben, sofern Sie nicht explizit über den Support eine Anfrage angefordert haben.
1 Die Zeilengröße ist eine ungefähre Angabe, da die Größe auf der internen Darstellung der Zeilendaten basiert. Es kommt in bestimmten Phasen der Ausführung eines Abfragejobs zur Anwendung.