Guia introdutório sobre otimizações de custo e performance no BigQuery
Visão geral
Abaixo está a lista de todas as queries do repositório no GitHub desta série de artigos, com uma breve descrição de cada uma. Para cada caso, há uma query que usa as views do INFORMATION_SCHEMA e outras duas que usam os sinks de audit log do BigQuery. Entre essas duas, uma é a versão geral, identificada pelo sufixo "_general" no nome do arquivo, que percorre todos os projetos do sink, e a outra busca por projeto, sem sufixos extras no nome.

Vou atualizar esta lista à medida que novas queries forem adicionadas. Dito isso, qualquer pedido de query pode ser feito nos comentários, e elas serão incluídas conforme o tempo permitir.
Como ler esta lista
Como o Medium não tem suporte nativo a tabelas — que seriam a forma mais lógica de apresentar esses dados —, organizei tudo em uma lista com marcadores, um meio-termo confortável entre legibilidade e elegância.
A primeira linha traz o nome do arquivo em negrito e itálico; logo abaixo vem a descrição da query e, por fim, os links em marcadores.
A lista de queries
- billing_recommendation_per_query.sql
Retorna cada query do período com uma recomendação sobre se ela rodaria de forma mais eficiente em um plano de cobrança flat-rate ou on-demand. A recomendação é baseada na quantidade de slots e nos bytes escaneados.
- concurrent_queries_by_minute.sql
Monta uma série temporal no intervalo, minuto a minuto, e retorna o número de queries concorrentes executadas em cada janela.
- concurrent_queries_by_second.sql
Monta uma série temporal no intervalo, segundo a segundo, e retorna o número de queries concorrentes executadas em cada janela.
- general_job_information.sql
Retorna um subconjunto de informações gerais de cada job executado no período.
- load_job_information.sql
Retorna informações gerais de cada load job executado no período.
- load_slots_per_minute.sql
Monta uma série temporal no intervalo, minuto a minuto, e retorna o número de slots consumidos pelos load jobs executados em cada janela.
- load_slots_per_second.sql
Monta uma série temporal no intervalo, segundo a segundo, e retorna o número de slots consumidos pelos load jobs executados em cada janela.
- longest_running_queries.sql
Retorna todas as queries executadas no intervalo e seus dados de cobrança, ordenadas da mais demorada para a mais rápida.
- looker_job_information.sql
Retorna informações gerais de cada job executado no período que estava associado a uma service account do Looker.
- query_counts.sql
Retorna todas as queries executadas no período junto com o total de execuções, ordenadas da mais executada para a menos executada.
- query_job_information.sql
Retorna informações gerais de cada query job executado no período.
- query_slots_per_minute.sql
Monta uma série temporal no intervalo, minuto a minuto, e retorna o número de slots consumidos pelos query jobs executados em cada janela.
- query_slots_per_second.sql
Monta uma série temporal no intervalo, segundo a segundo, e retorna o número de slots consumidos pelos query jobs executados em cada janela.
- slots_by_day.sql
Monta uma série temporal no intervalo, dia a dia, e retorna o número de slots consumidos por todos os jobs executados em cada janela.
- slots_by_hour.sql
Monta uma série temporal no intervalo, hora a hora, e retorna o número de slots consumidos por todos os jobs executados em cada janela.
- slots_by_minute.sql
Monta uma série temporal no intervalo, minuto a minuto, e retorna o número de slots consumidos por todos os jobs executados em cada janela.
- slots_by_minute_and_user.sql
Monta uma série temporal no intervalo, minuto a minuto, e retorna o número de slots consumidos por todos os jobs executados em cada janela, agrupados pelo usuário que os disparou.
- slots_by_second.sql
Monta uma série temporal no intervalo, segundo a segundo, e retorna o número de slots consumidos por todos os jobs executados em cada janela.
- table_query_counts.sql
Retorna o número de jobs que acessaram cada tabela durante o período especificado. Vale lembrar que, se uma tabela existir mas não for acessada por nenhum job, ela não vai aparecer no resultado.
- top_billed_labels.sql
Retorna os custos por label aplicada aos jobs no período especificado, ordenados das labels mais caras para as mais baratas.
- top_billed_queries.sql
Retorna os query jobs executados no período especificado, ordenados pelo custo cobrado, do mais caro para o mais barato.
Observação: o resultado pode conter duplicatas se um job for executado várias vezes com os mesmos parâmetros.
- top_billed_queries_deduplicated.sql
Retorna os query jobs executados no período especificado, ordenados pelo custo cobrado, do mais caro para o mais barato.
Observação: este job vai deduplicar as execuções e retornar apenas uma linha por job. Roda bem mais devagar que a query anterior.
- top_complex_queries.sql
Retorna os query jobs ordenados do mais complexo para o menos complexo. A complexidade é medida pela quantidade de slots usados para concluir o processamento.
- top_cost_users.sql
Retorna os usuários que iniciaram jobs e quanto gastaram, ordenados do maior para o menor custo. Observação: a lista também inclui service accounts.
- top_costly_queries.sql
Retorna os query jobs executados no período especificado com o custo total, considerando múltiplas execuções no cálculo. Os resultados são ordenados do mais caro para o mais barato.