Ler dados com a API BigQuery através da paginação
Este documento descreve como ler dados de tabelas e resultados de consultas com a API BigQuery através da paginação.
Navegue pelas páginas de resultados através da API
Todos os métodos *collection*.list
devolvem resultados paginados
em determinadas circunstâncias. A propriedade maxResults
limita o número de resultados por página.
Método | Critérios de paginação | Valor maxResults predefinido |
Valor máximo de maxResults |
Valor máximo de maxFieldValues |
---|---|---|---|---|
tabledata.list |
Devolve resultados paginados se o tamanho da resposta for superior a
10 MB1 de dados ou mais de maxResults
linhas. |
Ilimitado | Ilimitado | Ilimitado |
Todos os outros métodos de *collection*.list |
Devolve resultados paginados se a resposta tiver mais de maxResults linhas e também menos do que os limites máximos. |
10 000 | Ilimitado | 300 000 |
Se o resultado for superior ao limite de bytes ou campos, o resultado é
reduzido para se ajustar ao limite. Se uma linha for superior ao limite de bytes ou campos, o tabledata.list
pode devolver até 100 MB de dados1, o que é consistente com o limite máximo de tamanho de linhas para resultados de consultas.
Não existe um tamanho mínimo por página e algumas páginas podem devolver mais linhas do que outras.
1O tamanho da linha é aproximado, uma vez que o tamanho se baseia na representação interna dos dados das linhas. O limite máximo de tamanho das linhas é aplicado durante determinadas fases da execução da tarefa de consulta.
jobs.getQueryResults
pode devolver 20 MB de dados, a menos que tenha pedido explicitamente mais através do apoio técnico.
Uma página é um subconjunto do número total de linhas. Se os resultados tiverem mais de uma página de dados, os dados dos resultados têm uma propriedade pageToken
. Para obter a página seguinte de resultados, faça outra chamada e inclua o valor do token como um parâmetro de URL denominado pageToken
.list
O método tabledata.list
, que é usado para navegar pelos dados da tabela, usa um valor de deslocamento de linhas ou um token de página. Consulte o artigo Explorar dados de tabelas
para obter informações.
Itere os resultados das bibliotecas cliente
As bibliotecas de cliente da nuvem processam os detalhes de baixo nível da paginação da API e oferecem uma experiência mais semelhante a um iterador que simplifica a interação com os elementos individuais nas respostas das páginas.
Os exemplos seguintes demonstram a paginação através dos dados da tabela do BigQuery.
C#
Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Go
Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
As bibliotecas cliente da nuvem para Go fazem a paginação automaticamente por predefinição, pelo que não precisa de implementar a paginação manualmente. Por exemplo:
Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
As bibliotecas cliente da nuvem para Node.js fazem a paginação automaticamente por predefinição, pelo que não precisa de implementar a paginação manualmente. Por exemplo:
PHP
Antes de experimentar este exemplo, siga as PHPinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API PHP BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
A paginação ocorre automaticamente nas bibliotecas de cliente da nuvem para PHP
através da função do gerador rows
, que obtém a página seguinte de
resultados durante a iteração.
Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
As bibliotecas cliente da nuvem para Python fazem a paginação automaticamente por predefinição, pelo que não precisa de implementar a paginação manualmente. Por exemplo:
Ruby
Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Ruby BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
A paginação ocorre automaticamente nas bibliotecas de cliente da nuvem para Ruby
através de Table#data
e Data#next
.
Peça páginas arbitrárias e evite chamadas de listas redundantes
Quando navega para trás ou salta para páginas arbitrárias através de valores em cache, é possível que os dados nas suas páginas tenham mudado desde a última vez que foram vistos, mas não existe nenhuma indicação clara de que os dados possam ter mudado.pageToken
Para mitigar esta situação, pode usar a propriedade etag
.
Todos os métodos collection.list
(exceto Tabledata) devolvem uma propriedade etag
no resultado. Esta propriedade é um hash dos resultados da página que pode ser usado para verificar se a página foi alterada desde o último pedido. Quando faz um pedido ao BigQuery com um valor ETag, o BigQuery compara o valor ETag com o valor ETag devolvido pela API e responde com base na correspondência ou não dos valores ETag. Pode usar ETags para evitar chamadas de listas redundantes da seguinte forma:
Para devolver valores de lista se os valores tiverem sido alterados.
Se só quiser devolver uma página de valores da lista se os valores tiverem sido alterados, pode fazer uma chamada de lista com um ETag armazenado anteriormente através do cabeçalho HTTP "if-none-match". Se o ETag que fornecer não corresponder ao ETag no servidor, o BigQuery devolve uma página de novos valores da lista. Se as ETags corresponderem, o BigQuery devolve um código de estado
HTTP 304 Not Modified
e nenhum valor. Um exemplo disto pode ser uma página Web onde os utilizadores podem preencher periodicamente informações que são armazenadas no BigQuery. Se não houver alterações aos seus dados, pode evitar fazer chamadas de listas redundantes para o BigQuery usando o cabeçalho if-none-match com ETags.Para devolver valores de lista se os valores não tiverem sido alterados.
Se quiser devolver apenas uma página de valores da lista se os valores da lista não tiverem sido alterados, pode usar o cabeçalho HTTP "if-match". O BigQuery faz corresponder os valores ETag e devolve a página de resultados se os resultados não tiverem sido alterados ou devolve um resultado 412 "Precondition Failed" se a página tiver sido alterada.
Navegar pelas páginas dos resultados da consulta
Cada consulta escreve numa tabela de destino. Se não for fornecida nenhuma tabela de destino, a API BigQuery preenche automaticamente a propriedade da tabela de destino com uma referência a uma tabela anónima temporária.
API
Leia o campo jobs.config.query.destinationTable
para determinar a tabela na qual os resultados da consulta foram escritos.
Ligue para tabledata.list
para ler os resultados da consulta.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Para definir o número de linhas devolvidas em cada página, use uma tarefa GetQueryResults
e defina a opção pageSize
do objeto QueryResultsOption
que transmite, como mostrado no exemplo seguinte:
TableResult result = job.getQueryResults();
QueryResultsOption queryResultsOption = QueryResultsOption.pageSize(20);
TableResult result = job.getQueryResults(queryResultsOption);
Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Python
O método
QueryJob.result
devolve um iterável dos resultados da consulta. Em alternativa,
- Leia a propriedade
QueryJob.destination
. Se esta propriedade não estiver configurada, a API define-a como uma referência a uma tabela anónima temporária. - Obtenha o esquema da tabela com o método
Client.get_table
. - Crie um iterável em todas as linhas da tabela de destino com o método
Client.list_rows
.
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.