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
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
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
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
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
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.
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)