Processamento de dados · tema 8 de 30
Particionamento de dados
35 min · 2 vídeos · 12 cards · 2 drill
Por que cai
É onde a banca testa julgamento técnico com número. Todo mundo sabe dizer que particionamento acelera consulta; poucos sabem explicar cardinalidade, small files e hot partition, e menos ainda percebem que particionamento em banco relacional e em data lake são mecanismos diferentes com o mesmo nome.
Pré-teste · 1 de 2
responda antes de verQual é o principal mecanismo pelo qual particionar acelera uma consulta?
Vídeo · português · 26 min
Em uma frase
Particionar é dividir fisicamente o dado por uma chave para que a consulta leia apenas o pedaço que interessa, em vez de varrer tudo.
Para que serve: partition pruning
partition pruning— Descarte de partições inteiras antes de abrir qualquer arquivo, com base no filtro da consulta.Esse é o ganho central, e ele tem uma condição: a consulta precisa filtrar pela
coluna de partição. Se o relatório do time de risco sempre traz
WHERE data_transacao BETWEEN ..., particionar por data faz o motor ler dois
diretórios em vez de dois mil. Se ninguém filtra por aquela coluna, você criou
complexidade sem retorno.
Há um segundo ganho, menos citado e muito valioso em banco: expiração vira operação de metadado. Descartar log com mais de 90 dias é remover diretórios, não varrer a tabela procurando linhas velhas.
Data ou chave de negócio?
Data é o padrão em serviço financeiro por três motivos: quase toda consulta tem recorte temporal, o volume por dia é previsível, e o ciclo de vida do dado é temporal. Chave de negócio — produto, canal, segmento — só funciona quando a cardinalidade é baixa e a distribuição é equilibrada e as consultas filtram por ela.
Na prática, o desenho comum é data como primeiro nível e, no máximo, uma segunda coluna de baixíssima cardinalidade.
Cardinalidade e small files
O motor paga um custo fixo por arquivo: listar, abrir, ler o rodapé de metadados, agendar a task. Quando o arquivo tem 4 KB, esse custo fixo é praticamente todo o tempo de execução. A documentação do Databricks recomenda pelo menos 1 GB por partição e desaconselha particionar tabelas abaixo de 1 TB — número de plataforma, não lei universal, mas é a ordem de grandeza que você deve ter na cabeça.
O extremo oposto também existe: cardinalidade baixa demais, como particionar seis anos de transação por ano, dá partições grandes que não podem ser podadas com precisão.
Hot partition
Distribuição desigual é o problema mais difícil de enxergar. Particionar eventos de PIX por instituição recebedora parece razoável até você olhar os números: umas poucas instituições concentram a maior parte do volume. Como cada partição vira uma unidade de trabalho, uma task fica com quase todo o dado e as outras terminam em segundos. O job passa a demorar o tempo da maior task, e comprar mais nós não ajuda.
Sintoma na Spark UI: dentro do mesmo stage, uma task destoa em ordem de grandeza em duração e em bytes lidos. Correções: trocar a chave, compor com uma segunda coluna, aplicar hash ou salt no valor concentrado, ou tirar aquela dimensão da partição e colocá-la em bucket.
Bucketing e clustering
Bucketing distribui as linhas por hash da chave em um número fixo de arquivos, dentro da partição. Resolve um problema diferente: colocalizar a mesma chave dos dois lados de um join para evitar shuffle, e agrupar leituras por chave fina sem criar diretório para cada valor.
| Técnica | Como divide | Resolve | Sofre com cardinalidade alta? |
|---|---|---|---|
| Partição | Diretórios ou segmentos por valor da chave | Pruning por filtro e expiração barata | Sim, gera small files |
| Bucket / clustering | Hash da chave em N arquivos fixos | Join e agregação por chave sem shuffle | Não, N é fixo |
A combinação clássica em banco: data no diretório, cartão no bucket.
Mesmo nome, mecanismos diferentes
Como escolher a chave
- 1Levante o filtro dominante das consultas reais, não o imaginado.
- 2Meça a cardinalidade e a distribuição dos valores candidatos.
- 3Estime o tamanho médio da partição resultante e compare com a ordem de grandeza de 1 GB.
- 4Se a chave natural tiver cardinalidade alta, use granularidade mais grossa na partição e bucket na chave fina.
- 5Valide depois de implantar: distribuição de tasks, contagem e tamanho médio dos arquivos.
Se quiser outro ângulo
Como cai na sabatina
“Como você particionaria a tabela de transações de cartão?”
Erros comuns
- Particionar por uma chave de altíssima cardinalidade, como CPF ou id da transação. Cada partição vira um arquivo minúsculo, e o custo de abrir milhões de arquivos supera qualquer ganho de leitura.
- Particionar por uma chave que a consulta não filtra. Se ninguém escreve WHERE naquela coluna, não existe partition pruning e você só criou complexidade.
- Ignorar a distribuição real dos valores. Particionar por agência ou por bandeira quando 60 por cento do volume está em um único valor cria hot partition: uma task carrega o job inteiro.
- Confundir partição de tabela relacional com pasta no data lake. No relacional é uma estrutura interna do banco com índices e estatísticas; no lake é literalmente um diretório no caminho do arquivo.
- Tratar bucketing como sinônimo de particionamento. Bucket distribui por hash em um número fixo de arquivos e serve para join e agregação por chave; partição fisicamente separa e serve para pruning.
- Particionar tabela pequena. Abaixo de alguns gigabytes, particionar costuma piorar: você cria arquivos pequenos e sobrecarrega o metastore sem ganhar leitura.
Flashcards
Card 1 de 12
0 certos · 0 a reverDrill
Escolha a chave de partição
Para cada tabela do banco, diga qual chave você usaria e por quê. Formule em voz alta antes de abrir a resposta; a justificativa vale mais que a chave.
1.Transações de cartão, 8 bilhões de linhas, consultadas quase sempre por intervalo de datas e às vezes por cliente.
2.Cadastro de clientes, 12 milhões de linhas, consultado por CPF pelo aplicativo.
3.Eventos de PIX, alto volume, com consultas por dia e por instituição recebedora, sendo que três instituições concentram a maior parte.
4.Log de acesso ao internet banking, retido por 90 dias e depois descartado.
5.Tabela de câmbio com 40 mil linhas atualizada uma vez por dia.
6.Propostas de crédito, consultadas por período e por produto, com cinco produtos de volume parecido.
Drill
Partição, bucket ou nada?
Classifique a técnica adequada para cada objetivo declarado.
1.Fazer a consulta ler apenas os arquivos de março de 2026.
2.Evitar shuffle no join entre transações e cartões pela chave do cartão.
3.Acelerar a busca de um único CPF numa tabela de 12 milhões de linhas em banco relacional.
4.Descartar todo o dado com mais de 90 dias sem varrer a tabela.
Quiz · 1 de 2
Qual afirmação descreve corretamente a diferença entre particionamento em banco relacional e em data lake?
Explique para um gerente
Explique para um analista de negócio por que a consulta do relatório dele caiu de dez minutos para dez segundos sem que ninguém tenha comprado máquina nova.
Responda em voz alta antes de seguir. Se travar numa palavra técnica, é sinal de que ainda não entendeu essa parte.
Perguntas de sabatina deste tema
- · Como você particionaria a tabela de transações de cartão do banco?
- · Um job que lê a tabela de eventos de PIX ficou dez vezes mais lento depois que o time particionou por instituição recebedora. O que você investigaria?
Para ir além