Usar o ambiente de execução avançado do BigQuery

O tempo de execução avançado do BigQuery é um conjunto de melhorias de performance projetadas para acelerar automaticamente as cargas de trabalho analíticas sem exigir ações do usuário ou mudanças no código. Este documento descreve essas melhorias de performance, incluindo vetorização aprimorada e otimizações de consultas curtas.

Papéis e permissões

Para receber as permissões necessárias para especificar uma configuração, peça ao administrador para conceder a você o papel do IAM de Administrador do BigQuery (roles/bigquery.admin) no projeto ou na organização. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Vectorização aprimorada

A execução vetorizada é um modelo de processamento de consultas que opera em colunas de dados em blocos alinhados ao tamanho do cache da CPU e usa instruções de instrução única, vários dados (SIMD). A vetorização aprimorada estende a execução de consultas vetorizadas no BigQuery aos seguintes aspectos do processamento de consultas:

  • Ao usar codificações de dados especializadas no formato de armazenamento do Capacitor, as operações de avaliação de filtro podem ser executadas nos dados codificados.
  • As codificações especializadas são propagadas pelo plano de consulta, o que permite que mais dados sejam processados enquanto ainda estão codificados.
  • Ao implementar o dobramento de expressões para avaliar funções determinísticas e expressões constantes, o BigQuery pode simplificar predicados complexos em valores constantes.

Otimizações de consultas curtas

Normalmente, o BigQuery executa consultas em um ambiente distribuído usando uma camada intermediária de embaralhamento. As otimizações de consultas curtas identificam dinamicamente consultas que podem ser executadas como um único estágio, reduzindo a latência e o consumo de slots. Codificações especializadas podem ser usadas com mais eficiência quando uma consulta é executada em uma única etapa. Essas otimizações são mais eficazes quando usadas com o modo opcional de criação de jobs, que minimiza a latência de inicialização, manutenção e recuperação de resultados.

A qualificação para otimizações de consultas curtas é dinâmica e influenciada pelos seguintes fatores:

  • O tamanho previsto da verificação de dados.
  • A quantidade de movimentação de dados necessária.
  • A seletividade dos filtros de consulta.
  • O tipo e o layout físico dos dados no armazenamento.
  • A estrutura geral da consulta.
  • As estatísticas históricas de execuções de consultas anteriores.

Ativar o ambiente de execução avançado

Entre 15 de setembro de 2025 e o início de 2026, o BigQuery vai começar a usar o ambiente de execução avançado como padrão para todos os projetos. Para ativar o tempo de execução avançado em um projeto ou organização atual, use a instrução ALTER PROJECT ou ALTER ORGANIZATION para mudar a configuração padrão. Na instrução, defina o argumento query_runtime como 'advanced'. Exemplo:

ALTER PROJECT PROJECT_NAME
SET OPTIONS (
  `region-LOCATION.query_runtime` = 'advanced'
);

Substitua:

  • PROJECT_NAME: o nome do projeto.
  • LOCATION: o local em que os jobs devem tentar usar o runtime avançado.

Pode levar vários minutos para que a mudança entre em vigor.

Depois de ativar o ambiente de execução avançado, as consultas qualificadas no projeto ou na organização vão usar esse ambiente, independentemente de qual usuário criou o job de consulta.

Estimar o impacto do tempo de execução avançado

Para estimar o impacto do ambiente de execução avançado, use a seguinte consulta SQL para identificar as consultas de projeto com a maior melhoria estimada no tempo de execução:

WITH
  jobs AS (
    SELECT
      *,
      query_info.query_hashes.normalized_literals AS query_hash,
      TIMESTAMP_DIFF(end_time, start_time, MILLISECOND) AS elapsed_ms,
      EXISTS(
        SELECT 1
        FROM UNNEST(JSON_QUERY_ARRAY(query_info.optimization_details.optimizations)) AS o
        WHERE JSON_VALUE(o, '$.enhanced_vectorization') = 'applied'
      ) AS has_advanced_runtime
    FROM region-LOCATION.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE EXTRACT(DATE FROM creation_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
  ),
  most_recent_jobs_without_advanced_runtime AS (
    SELECT *
    FROM jobs
    WHERE NOT has_advanced_runtime
    QUALIFY ROW_NUMBER() OVER (PARTITION BY query_hash ORDER BY end_time DESC) = 1
  )
SELECT
  job.job_id,
  100 * SAFE_DIVIDE(
    original_job.elapsed_ms - job.elapsed_ms,
    original_job.elapsed_ms) AS percent_execution_time_saved,
  job.elapsed_ms AS new_elapsed_ms,
  original_job.elapsed_ms AS original_elapsed_ms,
FROM jobs AS job
INNER JOIN most_recent_jobs_without_advanced_runtime AS original_job
  USING (query_hash)
WHERE
  job.has_advanced_runtime
  AND original_job.end_time < job.start_time
ORDER BY percent_execution_time_saved DESC
LIMIT 10;

Substitua:

  • LOCATION: o local em que a performance do job deve ser medida

Se o ambiente de execução avançado foi ativado e aplicado, os resultados dessa consulta podem ser semelhantes a estes:

/*--------------+----------------------------+----------------+---------------------*
 |    job_id    | percent_elapsed_time_saved | new_elapsed_ms | original_elapsed_ms |
 +--------------+----------------------------+----------------+---------------------+
 | sample_job1  |         45.38834951456311  |            225 |                 412 |
 | sample_job2  |         45.19480519480519  |            211 |                 385 |
 | sample_job3  |         33.246753246753244 |            257 |                 385 |
 | sample_job4  |         29.28802588996764  |           1311 |                1854 |
 | sample_job5  |         28.18181818181818  |           1027 |                1430 |
 | sample_job6  |         25.804195804195807 |           1061 |                1430 |
 | sample_job7  |         25.734265734265733 |           1062 |                1430 |
 | sample_job8  |         25.454545454545453 |           1066 |                1430 |
 | sample_job9  |         25.384615384615383 |           1067 |                1430 |
 | sample_job10 |         25.034965034965033 |           1072 |                1430 |
 *--------------+----------------------------+----------------+---------------------*/

Os resultados dessa consulta são apenas uma estimativa do impacto do tempo de execução avançado. Muitos fatores podem influenciar o desempenho da consulta, incluindo, mas não se limitando a, disponibilidade de slot, mudança nos dados ao longo do tempo, visualização ou definições de UDF e diferenças nos valores de parâmetros de consulta.

Se os resultados dessa consulta estiverem vazios, nenhum job usou o tempo de execução avançado ou todos foram otimizados há mais de 30 dias.

Essa consulta pode ser aplicada a outras métricas de desempenho de consulta, como total_slot_ms e total_bytes_billed. Para mais informações, consulte o esquema para INFORMATION_SCHEMA.JOBS_BY_PROJECT.