Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Engenharia de Dados 101

Engenharia de Dados 101

Dilemas, stack e problemas da engenharia de dados ;)

Nicolas Vieira

October 02, 2023
Tweet

More Decks by Nicolas Vieira

Other Decks in Technology

Transcript

  1. quem eu sou • Comecei técnico no Fernando em 2009

    e odiei; • Formei em engenharia mecatrônica (promissor); • Acabei virando cientista (criminoso), analista de dados até me encontrar como Engenheiro; • Passei pela Gamers Club, Gympass, idwall e hoje trabalho como Team Lead SR Data Engineer na 90PoE; • No pessoal: Tenho dois gatos: Vorti e Ciri. Gosto de viajar, samba, cerâmica, bebidas alcoólicas, fotografia analógica e sou ex-viciado em jogos competitivos.
  2. cuida da plataforma de dados que é consumida por analíticos,

    relatoriais, modelagens (ciência de dados) ou mesmo transacionais.
  3. mas tudo é contornável • adicionar indíces para melhorar a

    performance; ◦ tudo que resta é dor, pois afeta diretamente outros sistemas produtivos • colocar uma réplica asíncrona e exclusivamente para a ponta de reporting ◦ essa não é tão ruim (mas depende) • recomeçar com uma alternativa sustentável do início.
  4. • Isolar infraestrutura é importante em nível de propósito (análise

    ≠ aplicação); • Pode-se criar diferentes scripts para ingerir de diferentes fontes; • Flexibilidade para construir tabelas que sejam otimizadas para análise de negócio e não para transações O que ganhamos:
  5. • Nem todo dado vai ser consultado o tempo todo;

    • Latência de query não é um problema; ◦ Uma query analítica não tem percepção de diferença de alguns milisegundos para poucos segundos; • Muitos dados :(: ◦ Arquivos podem usar compressão! ( - custo, - network) Características:
  6. Linha vs Colunar 1, Gordon Freeman, 27 ; 2, Jane

    Doe, 27 ; 3, John Doe, 32 Linha (localidade para cada registro) 1, 2, 3 ; Gordon Freeman, Jane Doe, John Doe ; 27, 27, 32 Colunar (localidade para cada coluna)
  7. Run length encoding (RLE) 1, 2, 3 ; Gordon Freeman,

    Jane Doe, John Doe ; 27, 27, 32 Colunar 1, 2, 3 ; Gordon Freeman, Jane Doe, John Doe ; 27(2), 32 Colunar (row length encoding)
  8. e muitas vezes só usam um subset dos dados 5

    colunas utilizadas Se cada tabela ter 20 colunas, isso significa que polpamos o scan de 18 + 17 (35) colunas na operação. *essa query pode ser melhorada ;)
  9. • Isolamos (na medida do possível) o banco de aplicação

    da nossa pipeline; • Flexibilidade para processar fontes diferentes; • Armazenamento com alta disponibilidade e baixo custo para o alto volume de dados; • Parquets dão eficiência em compressão e performance de leitura; • Nosso motor de query (Trino) pode escalar para picos de uso durante o dia; Em suma:
  10. • Propriedades ACID de banco que são importantíssimas; ◦ Existem

    "Modern Lake tools" que combinam parquet + metadata para dar suporte nisso; • Muitas "partes móveis" que dificultam desenvolvimento, teste e monitoramento; • Dilemas em controlar acesso (ACL); • Complexidade. Mas também perdemos:
  11. Muitas libs úteis e são duas das linguagens suportadas pelo

    Apache Spark, um processador de dados distribuído (para atender muito volume)
  12. mas dá para fazer MUITA coisa com bash/shell e é

    importantíssimo ter o básico.
  13. e se for em algum recurso da cloud: Terraform (ou

    algum IaC) é sempre bem vindo
  14. e aí precisamos de mais um item: um orquestrador que

    vai definir a lógica e horários de execução
  15. Crontabs e hoje crontab 0 0 * * * minuto

    hora dia mês dia da semana Airflow define ordem de execução, horários, mantém variáveis e secrets bem como invoca código, containers, pods e o que mais precisar;
  16. Algumas coisinhas • SQL e uma linguagem como Scala/Python; •

    Uma stack de cloud (AWS/GCS/Azure); • Bash; • Docker; • Entender e saber do funcionamento de alguns bancos de dados; • Apache Spark. Legal ter: Airflow, Kubernetes, Terraform, Monitoria, Kafka, boas noções de deployment, CI/CD etc;