Como gerenciar saídas de consulta

Ao avaliar os dados de saída, leve em conta o número de bytes gravados pela sua consulta. Quantos bytes são gravados no seu conjunto de resultados? Você está limitando corretamente a quantidade de dados gravados? Você está gravando repetidamente os mesmos dados? A quantidade de dados gravados por uma consulta afeta o desempenho da consulta (E/S). Se você está gravando resultados em uma tabela permanente (destino), a quantidade de dados gravados também tem um custo.

As práticas recomendadas a seguir fornecem orientação sobre o controle dos dados de saída.

Evite junções repetidas e subconsultas

Prática recomendada: evite juntar repetidamente as mesmas tabelas e usar as mesmas subconsultas.

Se você estiver juntando repetidamente as mesmas tabelas, pense em revisitar seu esquema. Em vez de juntar repetidamente os dados, pode ser mais eficiente usar dados repetidos aninhados para representar os relacionamentos. Os dados repetidos aninhados salvam o impacto de desempenho da largura de banda de comunicação exigida por uma junção. Ele também reduz os custos de E/S gerados pela leitura e gravação repetida dos mesmos dados. Para mais informações, consulte Como usar campos aninhados e repetidos.

Da mesma forma, repetir as mesmas subconsultas afeta o desempenho por meio do processamento repetitivo de consultas. Se você estiver usando as mesmas subconsultas em várias consultas, pense em materializar os resultados da subconsulta em uma tabela. Em seguida, use os dados materializados nas suas consultas.

Materializar os resultados de subconsulta melhora o desempenho e reduz a quantidade total de dados lidos e gravados pelo BigQuery. O pequeno custo de armazenar dados materializados supera o impacto no desempenho do processamento repetido de E/S e consultas.

Pense cuidadosamente na materialização de grandes conjuntos de resultados

Prática recomendada: pense cuidadosamente antes de materializar grandes conjuntos de resultados em uma tabela de destino. Gravar grandes conjuntos de resultados causa impactos de desempenho e custo.

O BigQuery limita os resultados em cache a aproximadamente 10 GB compactados. As consultas que retornam resultados maiores ultrapassam esse limite e frequentemente geram este erro: Response too large

Esse erro geralmente ocorre quando você seleciona um grande número de campos de uma tabela com uma quantidade considerável de dados. Problemas ao gravar resultados em cache também podem ocorrer em consultas em estilo ETL que normalizam dados sem redução ou agregação.

Você pode superar a limitação de tamanho dos resultados em cache:

  • usando filtros para limitar o conjunto de resultados;
  • usando uma cláusula LIMIT para reduzir o conjunto de resultados, especialmente se você estiver usando uma cláusula ORDER BY;
  • gravando os dados de saída em uma tabela de destino.

Esteja ciente de que gravar conjuntos de resultados muito grandes em tabelas de destino impacta o desempenho da consulta (E/S). Além disso, você terá um pequeno custo para armazenar a tabela de destino. Você pode excluir automaticamente uma tabela de destino grande usando a expiração de tabela padrão do conjunto de dados. Para mais informações, consulte Usar as configurações de expiração nas práticas recomendadas de armazenamento.

Use uma cláusula LIMIT em grandes classificações

Prática recomendada: se você estiver classificando um número muito grande de valores, use uma cláusula LIMIT.

Gravar resultados de uma consulta com uma cláusula ORDER BY pode gerar erros em Resources exceeded. Como a classificação final precisa ser feita em um único slot, se você estiver tentando solicitar um conjunto de resultados muito grande, ela pode sobrecarregar o slot que está processando os dados. Se você estiver usando uma cláusula ORDER BY, use também uma cláusula LIMIT.

Por exemplo, a seguinte consulta solicita um conjunto de resultados muito grande e lança um erro Resources exceeded. A consulta classifica pela coluna do title na tabela Wiki1B. A coluna de title contém milhões de valores.

SELECT
  title
FROM
  `bigquery-samples.wikipedia_benchmark.Wiki1B`
ORDER BY
  title

Para remover o erro, use uma consulta como esta:

SELECT
  title
FROM
  bigquery-samples.wikipedia_benchmark.Wiki1B
ORDER BY
  title DESC
LIMIT
  1000
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.