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

[Meetup dbt SP] dbt na prática: Escalabilidade ...

[Meetup dbt SP] dbt na prática: Escalabilidade e Automação em Data Warehouses com Uma Equipe de Uma Pessoa

[acrescentar mais tarde

Cadu Magalhães

December 03, 2024
Tweet

More Decks by Cadu Magalhães

Other Decks in Technology

Transcript

  1. Quem é esse? • 27 anos • ~5 anos de

    engenharia de dados • ~10 anos de programação • Google Cloud certified • Dono de gatos • Nerd, músico e cubista • Especialista em gambiarras • Participante de eventos e caçador de brindes Cadu Magalhães @1cadumagalhaes blog.cadumagalhaes.dev datacareer.guide
  2. Nossos desafios • Relatoria completa para ambos os lados (marcas

    X entidades) • Dados com qualidade, de múltiplas fontes e em near real time ◦ Dados transacionais internos (informações sobre as campanhas, sobre as entidades e anunciantes) ◦ Dados analíticos internos (campanhas entregues, impressões, cliques) ◦ Dados das entidades (audiencias de usuários) ◦ Dados externo das entidades (instagram, twitter, facebook) • Precisamos garantir que as execuções respeitem a ordem de dependências e a existência dos dados. Aplicamos testes, geramos documentação e criamos alertas em caso de falhas. • 16 dags diferentes, entre Extrações, Transformações e Movimentações
  3. Nossos desafios • Dados dinâmicos: uma nova entidade pode entrar

    a qualquer momento. ◦ Criamos o dataset da entidade, fazemos as conexões de dados e incluímos todo o necessário nas pipelines já existentes • Cada entidade pode ter de 0 a N conexões, mesmo que repetidas. Precisamos gerenciar e incluir nos dados finais • Usamos uma arquitetura medallion: ◦ dados brutos (dataset da entidade) ◦ dados agregados e tratados (datasets intermediários da retize) ◦ e no fim entregamos tabelas nos datasets de cada uma das entidades para a relatoria • Transformações de prioridades diferentes: ◦ Processamentos transacionais ◦ Processamentos de relatoria
  4. Solução 1 1. Utilizar funções de agendamento de consulta das

    próprias ferramentas (bigquery, databricks, snowflake). 2. Criar todos os agendamentos manualmente, chutando o tempo de execução de cada etapa, e tentando garantir que quando um iniciar, o anterior terá terminado. Só que: • Nenhuma forma simples de executar novamente se necessário • Complexidade para acrescentar novas etapas • Muito esforço para manutenção
  5. Solução 2 1. Construir um orquestrador usando alguma linguagem de

    script e um banco de dados. 2. Mapear as dependencias manualmente para cada nova etapa da pipeline. 3. Fazer as execuções de forma síncrona com base nesse mapeamento Só que: • Manutenção extremamente complexa • Simples acrescentar novas etapas, muito difícil remover alguma • Sujeito a erro humano
  6. Usando o dbt • Criamos macros para pedaços de consultas

    repetidas • Mapeamento de dependências é automático pela ferramenta • Mapeamos nossas fontes de dados sem nenhum trabalho extra, descrevemos nossos modelos e acrescentamos testes nos dados • Utilizamos variáveis para nossas configurações: novas entidades, quais fontes de dados estão conectadas.
  7. Enfim, qual a moral disso tudo? • Já passei por

    projetos mais simples, que não requerem dados tão dinâmicos e tantas fontes, e que precisavam de uma equipe de 6 engenheires (de estagiáries até eu, como senior) para dar conta da manutenção (e não termos tempo suficiente para evoluções). • Aqui na Retize, com dbt (e outras ferramentas da modern data stack) eu consigo manter a pipeline sozinha, em 2 ambientes distintos (dev e produção) enquanto ainda gerencio outras coisas, e estamos o tempo inteiro evoluindo a pipeline. • Reduzimos o nosso custo de ETL em 95% (saindo de diversas views criadas durante o desenvolvimento para utilização das materializações adequadas do dbt)
  8. Nossos próximos passos Inclusão de novas fontes de dados (em

    andamento: google analytics) Aplicação de testes no restante das transformações (dbt_expectations) Monitoramento dos testes com elementary