Entrevistas para engenheiro de dados testam três coisas: SQL, como você projeta e opera pipelines de dados, e como você raciocina sobre escala e falhas. Abaixo estão 20 perguntas com respostas que você pode adaptar, na ordem em que os candidatos costumam encontrá-las. Os exemplos de SQL foram executados em um pequeno banco de dados de amostra antes da publicação, e os resultados mostrados são a saída real.
Perguntas de SQL
1. Encontre o segundo maior salário em cada empresa ou no geral
Use DENSE_RANK, para que empates compartilhem a mesma posição e "segundo maior" signifique o segundo valor distinto.
SELECT name, salary
FROM (
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r = 2;
Em uma tabela com salários 150, 130, 130, 110, 90, 70, isso retorna as duas pessoas que recebem 130. Explique por que você escolheu DENSE_RANK em vez de RANK (que pula números após empates) e ROW_NUMBER (que desempata de forma arbitrária).
2. Os dois maiores salários de cada departamento
SELECT dept, name, salary
FROM (
SELECT dept, name, salary,
RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r <= 2;
O PARTITION BY reinicia o ranking para cada departamento. Mencione que salários empatados podem retornar mais de duas linhas com RANK.
3. Total acumulado por cliente
SELECT customer, order_date, amount,
SUM(amount) OVER (PARTITION BY customer ORDER BY order_date) AS running_total
FROM orders;
Para um cliente com pedidos de 10, 20 e 30 em datas crescentes, os totais acumulados são 10, 30 e 60.
4. Remova linhas duplicadas, mantendo a primeira
SELECT id, user_id
FROM (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id) AS rn
FROM events
) t
WHERE rn = 1;
Aqui o ROW_NUMBER é o certo, porque você quer exatamente uma linha por grupo. Esteja pronto para dizer como você decidiria qual duplicata manter em uma tabela real (timestamp mais recente, registro mais completo).
5. Variação em relação à linha anterior
SELECT order_date, amount,
amount - LAG(amount) OVER (ORDER BY order_date) AS change
FROM orders
WHERE customer = 'A';
A variação da primeira linha é NULL, porque não existe linha anterior. Diga isso em voz alta, já que é o desdobramento habitual.
6. Qual é a diferença entre WHERE e HAVING?
WHERE filtra linhas antes do agrupamento, e HAVING filtra grupos após a agregação. Você não pode usar uma função de agregação como COUNT(*) no WHERE.
7. Como você acelera uma consulta lenta?
- Olhe o plano de execução antes de mudar qualquer coisa.
- Verifique se os filtros conseguem usar um índice e se funções aplicadas à coluna não estão bloqueando isso.
- Reduza os dados lidos: selecione apenas as colunas necessárias, filtre cedo e particione tabelas grandes por data.
- Substitua subconsultas repetidas por joins ou common table expressions, e verifique se há multiplicação acidental de linhas nos joins.
- Em warehouses, verifique clustering ou sort keys e quantos dados cada consulta lê.
Perguntas de design de pipeline
8. ETL ou ELT?
ETL transforma os dados antes de carregá-los. ELT carrega os dados brutos primeiro e os transforma dentro do warehouse. ELT é comum com warehouses na nuvem porque o armazenamento é barato, os dados brutos ficam disponíveis para reprocessamento e as transformações podem ser versionadas como SQL. ETL ainda faz sentido quando os dados precisam ser limpos ou mascarados antes de chegar, por exemplo para remover dados pessoais.
9. Batch ou streaming?
Escolha com base em quão atualizados os dados precisam estar. Batch é mais simples e mais barato e serve para relatórios diários. Streaming serve para casos em que minutos ou segundos importam, como verificações de fraude ou dashboards ao vivo. Muitos sistemas usam os dois. Fale sobre qual é a decisão de negócio, não apenas sobre a tecnologia.
10. O que é um pipeline idempotente, e por que isso importa?
Executá-lo duas vezes produz o mesmo resultado que executá-lo uma vez. Isso importa porque jobs falham e são repetidos. Para tornar uma carga idempotente, escreva por partição e sobrescreva aquela partição, ou use um upsert com uma chave estável, para que uma nova tentativa não crie duplicatas.
11. Como você lida com dados atrasados ou fora de ordem?
Use o tempo do evento em vez do tempo de chegada, e defina quanto tempo os dados podem atrasar. Em sistemas de streaming, uma watermark informa ao job quanto tempo esperar antes de fechar uma janela. Para tabelas em batch, reprocesse partições recentes em uma agenda, ou mantenha um processo de correção que reescreva os dias afetados.
12. Como você projeta para falhas e novas tentativas?
Faça etapas pequenas, idempotentes e que possam ser reexecutadas de forma independente. Armazene o estado fora do job. Alerte sobre dados ausentes ou atrasados, além de erros. Coloque um limite no número de tentativas e envie falhas repetidas para um lugar onde uma pessoa vá olhar.
13. Como você verifica a qualidade dos dados?
| Verificação | Exemplo |
|---|---|
| Completude | As contagens de linhas batem com a origem dentro de uma tolerância |
| Unicidade | A chave primária não tem duplicatas |
| Validade | Os valores estão em um intervalo ou conjunto esperado |
| Atualidade | O timestamp mais recente é recente o suficiente |
| Consistência | Os totais batem entre tabelas relacionadas |
Execute as verificações dentro do pipeline e falhe cedo, para que dados ruins não cheguem aos relatórios.
Perguntas sobre modelagem e armazenamento
14. O que é um star schema?
Uma tabela fato central armazena eventos mensuráveis, como pedidos, e se conecta a tabelas de dimensão que os descrevem, como cliente, produto e data. É fácil de consultar e rápido de agregar. Um snowflake schema normaliza ainda mais as dimensões, o que economiza espaço, mas adiciona junções.
15. O que são dimensões de mudança lenta?
São atributos de dimensão que mudam ao longo do tempo, como o endereço de um cliente. O Tipo 1 sobrescreve o valor antigo e perde o histórico. O Tipo 2 adiciona uma nova linha com datas de início e fim, preservando o histórico. Diga qual você escolheria para cada atributo e por quê.
16. Como você particiona uma tabela grande?
Particione por uma coluna que a maioria das consultas filtra, geralmente uma data. As consultas que filtram por ela leem apenas as partições correspondentes. Evite uma coluna com muitos valores distintos, o que cria um número enorme de partições minúsculas.
17. Quais formatos de arquivo você usa para analytics, e por quê?
Formatos colunares como Parquet armazenam cada coluna junta, então consultas que leem poucas colunas ignoram o resto e comprimem bem. Formatos de linha como CSV ou JSON são fáceis de produzir e ler, mas lentos e grandes em escala.
Perguntas sobre processamento distribuído
18. O que é um shuffle no Spark, e por que ele é caro?
Um shuffle move dados entre máquinas para que linhas com a mesma chave fiquem juntas, como em joins e group-bys. Ele custa transferência de rede, gravação em disco e ordenação. Para reduzi-lo, filtre cedo, escolha contagens de partições sensatas e faça broadcast de uma tabela pequena em um join para que a grande não precise se mover.
19. Como você lida com data skew?
Skew significa que poucas chaves concentram a maior parte dos dados, então uma tarefa roda muito mais tempo que as outras. As opções incluem aplicar salting na chave quente adicionando um sufixo aleatório e agregar duas vezes, fazer broadcast do lado menor de um join e filtrar ou tratar as chaves quentes separadamente.
20. O que um orquestrador como o Airflow faz?
Ele agenda e executa tarefas em ordem, definidas como um grafo direcionado onde cada tarefa depende das outras. Ele lida com retries, backfills e alertas, e mostra o que rodou e o que falhou. Ele coordena o trabalho. Não foi feito para fazer processamento pesado por conta própria, o que deve rodar em um warehouse ou em um motor de processamento.
Como se preparar
- Pratique os padrões de window function acima até conseguir escrevê-los sem olhar.
- Prepare um pipeline que você construiu, com o volume, as falhas que enfrentou e o que você mudou.
- Esteja pronto para desenhar uma arquitetura simples no quadro branco e dizer o que acontece quando uma etapa falha.
- Revise seu currículo: toda ferramenta nele pode ser questionada.
Para prática relacionada, veja nossos guias de perguntas de entrevista sobre Kafka, perguntas de entrevista sobre Databricks, perguntas de entrevista sobre Snowflake e perguntas de entrevista sobre system design.
Pratique em voz alta e com suas próprias palavras. Uma transcrição depois mostra onde você se perdeu ou fugiu do ponto. Siga as regras da empresa sobre ferramentas de IA em qualquer entrevista ou avaliação ao vivo.
Pratique suas respostas com YesToTheOffer
Ensaiar em voz alta, obter respostas construídas a partir do seu próprio currículo e revisar sua transcrição depois. 30 minutos grátis, sem assinatura.



