Utilizzo della paginazione con l'API BigQuery
Questo documento descrive come leggere i dati delle tabelle e i risultati delle query in set di dati di grandi dimensioni utilizzando la paginazione con l'API BigQuery.
Con la paginazione, BigQuery suddivide un set di dati di grandi dimensioni in blocchi più piccoli chiamati pagine. Per la maggior parte degli utenti, le librerie client Cloud gestiscono questo processo automaticamente, ma puoi anche controllare manualmente la paginazione per casi d'uso specifici, come le applicazioni web.
Utilizzare la numerazione automatica delle pagine
Le librerie client di Cloud gestiscono i dettagli di basso livello della paginazione delle API e forniscono un'esperienza simile a quella di un iteratore. Quando scorri i risultati, la libreria recupera automaticamente la pagina successiva di dati quando è necessario.
Gli esempi riportati di seguito mostrano come scorrere automaticamente i dati delle tabelle BigQuery.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Go
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery PHP.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Ruby.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Controllare le dimensioni della pagina
Puoi specificare il numero massimo di righe restituite in ogni richiesta di rete impostando una dimensione della pagina. L'impostazione delle dimensioni della pagina è utile per ottimizzare l'utilizzo della rete o per inserire i dati nella memoria.
Nella maggior parte delle librerie client, puoi utilizzare un parametro max_results o page_size
quando chiami metodi come list_rows o query.
Utilizzare la paginazione manuale con i token di pagina
La paginazione manuale è utile per le applicazioni stateless, ad esempio un servizio web in cui un utente fa clic su Avanti per visualizzare il successivo insieme di risultati. In questo scenario, il server non mantiene un iteratore attivo tra le richieste.
Utilizzi invece un token di pagina come segue:
- Richiedi una pagina.Chiama l'API e ricevi un parametro
pageTokeninsieme alle righe. - Riprendi.Nella richiesta successiva, ripassa lo stesso parametro
pageTokena BigQuery per recuperare il blocco di dati successivo.
Gli esempi riportati di seguito mostrano come recuperare un token di pagina e utilizzarlo per recuperare la pagina successiva dei risultati della query.
API
Leggi il campo
jobs.config.query.destinationTable
per determinare la tabella in cui sono stati scritti i risultati della query.
Chiama tabledata.list
per leggere i risultati della query.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per impostare il numero di righe restituite in ogni pagina, utilizza un
job GetQueryResults e imposta l'opzione
pageSize
dell'oggetto QueryResultsOption che trasmetti, come mostrato nell'esempio
seguente:
TableResult result = job.getQueryResults();
QueryResultsOption queryResultsOption = QueryResultsOption.pageSize(20);
TableResult result = job.getQueryResults(queryResultsOption);
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Il metodo
QueryJob.result
restituisce un iterabile dei risultati della query. In alternativa,
- Leggi la proprietà
QueryJob.destination. Se questa proprietà non è configurata, viene impostata dall'API su un riferimento a una tabella anonima temporanea. - Recupera lo schema della tabella con il metodo
Client.get_table. - Crea un iterabile su tutte le righe della tabella di destinazione con il metodo
Client.list_rows.
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Ottimizzare con gli ETag
Quando torni indietro di una pagina o vai a pagine arbitrarie utilizzando valori pageToken
memorizzati nella cache, è possibile che i dati nelle pagine siano cambiati dall'ultima visualizzazione. Per ridurre questo risultato, puoi utilizzare la proprietà etag.
Ogni metodo collection.list (ad eccezione di Tabledata) restituisce una proprietà etag nel risultato. Questa proprietà è un hash dei risultati della pagina
che può essere utilizzato per verificare se la pagina è stata modificata dall'ultima
richiesta. Quando invii una richiesta a BigQuery con un valore ETag,
BigQuery confronta il valore ETag con il valore ETag restituito dall'API e risponde in base alla corrispondenza o meno dei valori ETag. Puoi utilizzare i tag ETag
per evitare chiamate di elenchi ridondanti nel seguente modo:
- Per restituire i valori solo se sono stati modificati, effettua una chiamata di elenco con un ETag memorizzato in precedenza utilizzando l'intestazione HTTP
If-None-Match. Se gli ETag corrispondono, BigQuery restituisce un codice di statoHTTP 304 Not Modifiede nessun dato, risparmiando larghezza di banda. - Per restituire i valori solo se non sono stati modificati, utilizza l'intestazione HTTP
If-Match. BigQuery restituisce un412 Precondition Failedse la pagina è cambiata.
Riferimento: limiti e criteri delle API
Tutti i metodi *collection*.list restituiscono risultati paginati
in determinate circostanze. La proprietà maxResults limita il numero di
risultati per pagina.
| Metodo | Criteri di paginazione | Limite predefinito per maxResults |
Limite massimo di maxResults |
Limite massimo di maxFieldValues |
|---|---|---|---|---|
tabledata.list |
Restituisce risultati paginati se la dimensione della risposta è superiore a
10 MB1 di dati o a maxResults
righe. |
Illimitato | Illimitato | Illimitato |
Tutti gli altri metodi di *collection*.list |
Restituisce risultati paginati se la risposta contiene più di maxResults righe e anche meno dei limiti massimi. |
10.000 | Illimitato | 300.000 |
Se il risultato è maggiore del limite di byte o campi, viene
troncato per rientrare nel limite. Se una riga supera il limite di byte o campi,
il metodo tabledata.list può restituire fino a 100 MB di dati1,
in linea con il limite massimo di dimensioni delle righe per i risultati delle query.
Non esiste una dimensione minima per pagina e alcune pagine potrebbero restituire più righe di altre.
Il metodo dell'API REST jobs.getQueryResults può restituire 20 MB di dati, a meno che tu non ne richieda esplicitamente di più tramite l'assistenza.
1La dimensione della riga è approssimativa, poiché si basa sulla rappresentazione interna dei dati di riga. La dimensione massima della riga viene applicata durante alcune fasi dell'esecuzione del job di query.