Daten mit der BigQuery API und mit Paginierung lesen
In diesem Dokument wird beschrieben, wie Tabellendaten und Abfrageergebnisse mit der BigQuery API mithilfe von Paginierung gelesen werden.
Mit der API in Ergebnissen suchen
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 | Standardwert für maxResults |
Höchstwert für maxResults |
Höchstwert 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 tabledata.list
bis zu 100 MB Daten zurückgeben1. Dies entspricht der maximalen Zeilengröße für Abfragen.
Es gibt keine Mindestgröße pro Seite. Einige Seiten geben möglicherweise mehr Zeilen als andere zurück.
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.
jobs.getQueryResults
kann 20 MB Daten zurückgeben, sofern nicht explizit über den Support eine Anfrage angefordert wurde.
Eine Seite ist eine Teilmenge der Gesamtanzahl von Zeilen. Wenn die Ergebnisse mehr als eine Seite Daten umfassen, haben die Ergebnisdaten das Attribut pageToken
. Mit einem weiteren list
-Aufruf rufen Sie die nächste Seite mit Ergebnissen ab. Dabei nehmen Sie den Tokenwert als URL-Parameter mit dem Namen pageToken
auf.
Die Methode tabledata.list
zum Durchblättern von Tabellendaten verwendet einen Zeilenversatzwert oder einen Seitentoken. Weitere Informationen finden Sie unter In Tabellendaten suchen.
Ergebnisse der Clientbibliotheken iterieren
Die Cloud-Clientbibliotheken verarbeiten die Low-Level-Details der API-Paginierung und bieten eine Iterator-ähnliche Erfahrung, die die Interaktion mit den einzelnen Elementen in den Seitenantworten vereinfacht.
Die folgenden Beispiele zeigen das Durchblättern von BigQuery-Tabellendaten.
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.
Java
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Java-Einrichtungsanleitung 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.
Go
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Go-Einrichtungsanleitung 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.
Die Google Cloud-Clientbibliothek für Go erstellt Seitenumbrüche standardmäßig automatisch. Deshalb müssen Sie die Seitenumbrüche nicht selbst einfügen. Beispiel:
Node.js
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Node.js-Einrichtungsanleitung 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.
Die Cloud-Clientbibliothek für Node.js erstellt Seitenumbrüche standardmäßig automatisch. Deshalb müssen Sie die Seitenumbrüche nicht selbst einfügen. Beispiel:
PHP
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der PHP-Einrichtungsanleitung 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.
Das Erstellen von Seitenumbrüchen erfolgt in den Cloud-Clientbibliotheken für PHP automatisch mit der Generatorfunktion rows
. Diese ruft im Verlauf der Iteration die nächste Seite mit Ergebnissen ab.
Python
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.
Die Google Cloud-Clientbibliothek für Python erstellt Seitenumbrüche standardmäßig automatisch. Deshalb müssen Sie die Seitenumbrüche nicht selbst einfügen. Beispiel:
Ruby
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Ruby-Einrichtungsanleitung 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.
Das Erstellen von Seitenumbrüchen erfolgt in den Cloud-Clientbibliotheken für Ruby automatisch mit Table#data
und Data#next
.
Beliebige Seiten anfordern und redundante Listenaufrufe vermeiden
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. Es gibt jedoch keinen eindeutigen Hinweis darauf, dass sich die Daten möglicherweise 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:
So erhalten Sie Listenwerte, wenn sich die Werte geändert haben.
Möchten Sie eine Seite mit Listenwerten nur zurückgeben, wenn sich die Werte geändert haben, führen Sie einen Listenaufruf mit einem zuvor gespeicherten ETag durch. Dazu verwenden Sie den HTTP-Header "If-None-Match". Wenn der bereitgestellte ETag nicht mit dem ETag auf dem Server übereinstimmt, gibt BigQuery eine Seite mit neuen Listenwerten zurück. Wenn die ETags übereinstimmen, gibt BigQuery den Statuscode
HTTP 304 Not Modified
und keine Werte zurück. Ein Beispiel hierfür ist eine Webseite, auf der Nutzer regelmäßig Informationen eingeben, die in BigQuery gespeichert werden. Wenn keine Änderungen an Ihren Daten vorgenommen werden, können Sie redundante Listenaufrufe in BigQuery vermeiden, indem Sie den Header „if-none-match” mit ETags verwenden.So erhalten Sie Listenwerte, wenn sich die Werte geändert haben.
Möchten Sie eine Seite mit Listenwerten nur zurückgeben, wenn sich die Werte nicht geändert haben, verwenden Sie den HTTP-Header "If-Match". BigQuery vergleicht die ETag-Werte und gibt die Seite mit Ergebnissen zurück, wenn sich die Ergebnisse nicht geändert haben. Wenn sich die Seite geändert hat, gibt das Ergebnis 412 "Fehler bei Vorbedingung" zurück.
In Abfrageergebnissen suchen
Bei jeder Abfrage wird in eine Zieltabelle geschrieben. Wenn keine Zieltabelle bereitgestellt wird, füllt die BigQuery API automatisch das Zieltabellenattribut mit einem Verweis auf eine temporäre anonyme Tabelle.
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_table
auf. - Erstellen Sie mit der Methode
Client.list_rows
einen 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.