basedosdados / sdk

⚙️ Código de manutenção do datalake (metadados e pacotes de acesso) | 📖 Docs: https://basedosdados.github.io/mais/
https://info.basedosdados.org/links
MIT License
394 stars 89 forks source link

[doc] Incluir um artigo sobre otimização de consultas #1716

Closed laura-l-amaral closed 4 months ago

laura-l-amaral commented 4 months ago

########################

  1. Entenda o uso gratuito do Big Query (BQ)

Para usuários que acessam os dados em projetos públicos como o da Base dos Dados o único tipo de custo associado se refere ao custo de processamento das consultas. A notícia boa é que todo usuário possui *1 TB gratuito por mês para consultar livremente os dados do maior data lake público do Brasil!.

Pontos de destaque:

  1. Como usufruir ao máximo das consultas gratuitas

Nesta seção apresentamos algumas dicas simples para reduzir os custos das consulta e aproveitar ao máximo os dados da BD!

Antes de partir para os exemplos, apresentaremos o mecanismo básico de previsão de custos de processamento de consultas no Big Query (BQ).

Image

- Este é o mecanismo básico e prontamente acessível de previsibilidade do custo.
- Por motivos de limitação interna do próprio Big Query consultas a tabelas específicas não exibem estimativas de custos. É o caso das tabelas que possuem Row Access Policy. Isto é, tabelas onde o número de linhas acessíveis é limitada a depender do usuário. Este é o caso das tabelas que fazem parte do serviço [BDpro](https://info.basedosdados.org/bd-pro)
  1. Selecione somente as colunas de interesse

    • No Big Query os dados possuem o armazenamento orientado a colunas, isto é, cada coluna é armazenada separadamente. Esta característica tem uma implicação clara quanto aos custos de processamento: quanto mais colunas forem selecionadas, maior será o custo.

    • Evite: Selecionar colunas em excesso

      • SELECT *
    • Prática recomendada: selecione somente as colunas de interesse para reduzir o custo final da consulta.

      • SELECT coluna1, coluna2
    • Exemplo: tabela microdados do conjunto br_ms_sim.

      • Possui 31 milhões de linhas e 53 colunas
      • SELECT sequencial_obito, tipo_obito, data_obito FROM `basedosdados.br_ms_sim.microdados
        • custo estimado: 531MB
      • SELECT * FROM `basedosdados.br_ms_sim.microdados
        • custo estimado: 5.83 GB
    • Para entender mais a fundo a arquitetura colunar consulte a documentação oficial do Big Query

  2. Utilize colunas particionadas para filtrar os dados

    • As partições são divisões feitas em uma tabela para facilitar o gerenciamento e a consulta dos dados. No momento de execução da consulta o Big Query ignora linhas que possuem um valor da partição diferente do utilizado no filtro. Isto normalmente reduz significativamente a quantidade de linhas lidas e, o que nos interessa, reduz o custo de processamento.

    • Como saber qual coluna foi utilizada para particionar uma tabela específica?

      1. Pelos metadados na página de tabela do site da BD

        1. Image

      2. Pelos metadados na página de 'Detalhes' no Big Query

        1. Image

          • Prática recomendada: sempre que possível, utilize colunas particionadas para filtrar os dados.
          • Exemplo
          • Consulta utilizado a coluna particionada como filtro:
          • SELECT sequencial_obito, tipo_obito, data_obito FROM `basedosdados.br_ms_sim.microdados` where ano = 2015
          • custo estimado: 31.32 MB
  3. Muita atenção ao realizar joins entre tabelas

    • Avalie a real necessidade do JOIN
      • Certifique-se de que o join é realmente necessário para a análise que você está realizando. Às vezes, operações alternativas como subconsultas ou agregações podem ser mais eficientes.
    • Entenda a Lógica do JOIN
      • Diferentes tipos de joins (INNER, LEFT, RIGHT, FULL) têm diferentes implicações de desempenho e resultado. Gastar um tempinho entendo a melhor opção para seu objetivo de análise pode ajudar a ter um controle de custos mais eficiênte.
      • Um dos problemas que geralmente ocorrem é a multiplicação de linhas indesejadas no resultado final.
    • Utilize as dicas anteriores
      • Selecione somente colunas de interesse
      • Faça uso das colunas particionadas para filtrar os dados
      • Atente-se a estimativa de custos antes de executar a consulta