Opa pessoa, eu sou engenheiro de dados e me chamo Felipe Bormann (vocês pode checar mais sobre mim na página About). # TODO: Adicionar link para página about e atualizar a página about com alguns links meus.
O objetivo deste post são alguns:
- Mostrar meu ponto de vista sobre o que um engenheiro de dados faz dependendo do tamanho da empresa.
- Habilidades (hard skills mesmo) que um engenheiro de dados precisa ter para começar a realizar o trabalho de engenharia de dados.
- Habilidades que um engenheiro de dados tem de continuar adquirindo ao longo da carreira e algumas das libs mais importantes e o porquê disto.
O que um engenheiro de dados faz?
O objetivo de um engenheiro de dados é possibilitar e facilitar a vida de todo mundo que consome dados na empresa.
Tem algumas tarefas específicas que a gente faz:
- Gerar novas visões em cima dos dados armazenados (criando novas tabelas, gerando novos relatórios);
- Monitorar a qualidade dos dados gerados pelas novas visões;
- As vezes vestir o chapéu de DBA e otimizar a utilização dos recuros de um banco
- Otimizar queries feitas por terceiros
- Otimizar tabelas e arquitetura de dados de aplicações existentes
- As vezes assumir o chapéu de DevOps e provisionar e organizar os recursos da cloud
- Terraform ❤ , CloudFormation
Quais as ferramentas mais comuns?
É aqui que vem a parte mais interessante do artigo, eu gosto de dividir as ferramentas de dados entre algumas categorias:
- Dinossauro
- Quem acha que é Big Data
- Pra quem é Big Data de verdade
Basicamente eles tem a ver com o momento da empresa que você trabalhar. E é nele que eu vou me basear para fazer o compilado de dicas sobre ferramental e formas de estudar para trabalhar lá:
Dinossauro
Essas são as empresas que são compostas em sua maioria por sistemas legados, no Brasil, estas empresas não são tão comuns em grandes polos de tecnologia (como Recife) que são formadas por várias startups, mas existem aos montes por ai.
E nestas empresas geralmente os sistemas são bem legados e com poucos dados mas muito desorganizados/espalhados.
E por isto, pra se tornar/manter um engenheiro de dados nestas empresas geralmente o melhor caminho é identificar processos importantes e centrais da empresa que podem ser modificados por processos de engenharia de dados e geralmente para isto você só precisa de dois grupos de ferramenta:
- Extratores e transformadores fáceis de rodar
- Pra isso você pode usar Python e as várias libs que ele possue (Pandas, sqlalchemy, pytest) e eu foquei
- Testes
- Neste caso porque geralmente os processos de desenvolvimento da área de dados já existem em forma de procedures e outros sistemas de integração “legados” mas que funcionam perfeitamente bem.
- Bancos tradicionais (SQL Server , Oracle)
- Virtual Machines (VMs)
Quem acha que é Big Data
Na maioria das vezes são startups que já usam serviços cloud que escalam mas ainda não possuem dados suficientes para requerirem usar ferramentas de Big Data, então o jogo para entrar nelas (que são a graaaannnde maioria) é aprender a tríade do sucesso:
- Apache Airflow
- Python/Pandas (na maioria das vezes você nem precisa usar pandas, só transferir os arquivos e realizair transformações usando SQL dentro dos serviços cloud como BigQuery ou Redshift, o Python vai só servir como “cola” mesmo).
- Docker (porque eles vão usar KUBERNETES).
Pra quem é Big Data de verdade
Neste caso é onde de fato a vantagem de usar Cloud e serviços escaláveis vem a tona e diversidade de tecnologias que serão utilizadas é bem grande e por isto, eu não recomendo tentar aprender “Big Data” antes de aprender sobre ferramentas aplicáveis em small data porque a dificuldade e o ciclo de desenvolvimento e aprendizagem vai ser sempre maior.
Mas caso seu objetivo e único objetivo seja este as principais ferramentas serão:
- Cloud e seus serviços de dados
- SQL (Cloud SQL, AWS RDS, Azure DB)
- Mensageria (AWS SQS, GCP Pub/Sub, Apache Kafka)
- DW (AWS Redshift, GCP BigQuery)
- Docker
- Porque você vai usar containers em quase todos os processos (pela grande vantagem que eles trazem).
- Apache Airflow para orquestração ( ou GCP Composer)
- Python como linguagem de programação (somente pra chamar APIs)
- Apache Spark (você pode tentar aprender Scala também mas geralmente recomendo isso depois, o Pyspark já vai atender a grande maioria dos casos mesmo).
Com isso você já consegue fazer muita coisa em manipulação de dados mas muita coisa mesmo e atende empresas que geralmente tem demandas de dados gigantescas “facilmente”.
Outro detalhe interessante é que geralmente sua equipe será mais especializada, desta forma ajuda você ser capaz de se comunicar com pessoas que são DevOps e Data Science mas você não precisará assumir estes papéis com tanta frequência quanto em empresas menores.
Conceitos
Mas mais importante que focar nos cenários das empresas (que é um ponto de vista prático), você deve focar em aprender os conceitos mais importantes para ser um engenheiro de dados hoje em dia:
- Armazenamento (formato de arquivo, bancos, SQL)
- Processamento (Transformação como Python, Spark, DBT)
- Programação (Python, Java/Scala, Bash)
- Redes/Cloud (AWS, GCP, Azure)
T.L.R.:
- Escolha qual o tamanho de empresa que você quer trabalhar e treine para stacks daquele nível de empresa
- Pra quem é liso como eu: “pesquise” quais os tamanhos das empresas na sua redondeza que você quer trabalhar e treine para as stacks delas.
- Escolha um provedor de cloud específico para trabalhar (recomendação: AWS);
- Crie “mini mundos” que reproduzam cenários/tarefas comuns de um engenheiro dados
- Docker pode ajudar bastante aqui