O fan out acontece quando você faz join com uma tabela que tem várias linhas correspondentes por chave, então cada linha da esquerda é duplicada e qualquer SUM sobre ela fica inflado. É a causa mais comum de receita superestimada em um relatório. Detecte contando as linhas antes e depois do join, ou verificando se a chave do join é de fato única do lado direito antes de agregar.
Por que os entrevistadores perguntam isso
Isso produz números errados que parecem críveis, que é a pior classe de bug analítico, e normalmente só é pego por alguém do financeiro que sabe o total de verdade. Os entrevistadores querem um hábito ativo de detecção e não uma definição, e de preferência o padrão de pré agregar o lado de muitos antes do join.
Como estruturar sua resposta
- Explique o mecanismo: um join um para muitos duplicando as linhas da esquerda.
- Mostre por que os agregados inflam em vez de dar erro.
- Dê o hábito de detecção: contagem de linhas antes e depois.
- Verifique explicitamente a unicidade da chave do lado do join.
- Ofereça a correção: agregar o lado de muitos primeiro e só depois fazer o join.
Exemplo de resposta
Se eu faço join de pedidos com itens do pedido por order_id, e um pedido tem quatro itens, aquela linha de pedido agora aparece quatro vezes. Nada dá erro, mas se eu somo o total do pedido eu quadrupliquei a receita daquele pedido. É insidioso porque o número é plausível, só que errado, e quem descobre normalmente é o financeiro três semanas depois. Meu hábito é contar as linhas da tabela base, rodar o join, contar de novo e, se o número mudou, eu preciso conseguir explicar por quê. Eu também checo antes a unicidade da chave do join com um group by rápido e having count maior que um, o que leva dez segundos. A correção costuma ser agregar o lado de muitos até a granularidade que eu quero antes do join, então eu somo a receita dos itens por pedido em uma CTE e faço join dessa única linha por pedido de volta no cabeçalho. Isso mantém a granularidade intacta e deixa a query mais fácil de raciocinar.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você reescreveria uma query com fan out para preservar a granularidade?
- Por que SELECT DISTINCT é uma correção ruim para isso?
- Como você detectaria isso em um dashboard que outra pessoa construiu?
Mais perguntas para Analista de Dados
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas