Além da ementa · tema 21 de 30
Formatos de arquivo e formatos de tabela
30 min · 2 vídeos · 14 cards · 1 drill
Por que cai
É a pergunta que mede se você entende o que acontece no disco. Quem só sabe que 'Parquet é mais rápido' não explica predicate pushdown; quem confunde formato de arquivo com formato de tabela erra a resposta sobre Delta e Iceberg inteira.
Pré-teste · 1 de 2
responda antes de verUma consulta soma o valor de transações de um mês, sobre uma tabela com 60 colunas. Por que Parquet vence CSV?
Vídeo · português · 18 min
Em uma frase
Formato de arquivo decide como os bytes ficam organizados no disco; formato de tabela decide como um monte de arquivos vira uma tabela com transação, versão e schema.
Formatos de arquivo
Orientados a linha
CSV é texto separado por delimitador, sem tipo forte e sem schema. Serve para troca com humano e com sistema legado. Em escala é caro: exige parsing, não tem estatística e obriga a ler a linha inteira mesmo quando a consulta usa duas colunas.
JSON resolve estrutura aninhada e campos opcionais, que é como API entrega dado. Herda os mesmos custos do texto e ainda repete o nome do campo em cada registro.
Avro é binário, orientado a linha e carrega o schema junto. É o formato do caminho de escrita: evento em stream, tópico de Kafka, integração entre serviços. Evolução de schema é bem resolvida por design.
Orientados a coluna
Parquet e ORC guardam os valores agrupados por coluna, dentro de blocos horizontais chamados row groups, cada um com estatísticas próprias. Isso libera três ganhos que se somam:
- 1Column pruning: a consulta lê só as colunas que usa. Em tabela de 60 colunas usando 3, você lê 5% do arquivo.
- 2Predicate pushdown: o filtro é avaliado contra o mínimo e o máximo de cada row group, e os blocos fora da faixa são pulados sem descompressão.
- 3Compressão por coluna: valores do mesmo tipo vizinhos permitem codificação por dicionário e por repetição, reduzindo bytes lidos do S3.
| Formato | Orientação | Schema | Compressão | Onde brilha | Onde perde |
|---|---|---|---|---|---|
| CSV | Linha | Nenhum | Externa, do arquivo inteiro | Troca simples, leitura humana | Escala analítica, tipagem, nulos |
| JSON | Linha | Implícito | Externa | Estrutura aninhada, saída de API | Volume repetido de chaves, parsing caro |
| Avro | Linha | Embutido, com evolução | Por bloco | Stream, escrita contínua, integração | Consulta analítica por poucas colunas |
| Parquet | Coluna | Embutido no rodapé | Por coluna, com dicionário | Analytics em Spark, Databricks, Athena | Escrita incremental fina, leitura humana |
| ORC | Coluna | Embutido | Por coluna, com índices internos | Ecossistema Hive e Trino sobre Hive | Menos padrão fora desse ecossistema |
Formatos de tabela
Uma pasta com arquivos Parquet no S3 não é uma tabela: não tem transação, não tem versão, e um job que morre no meio deixa arquivo parcial que o próximo leitor vai contar. Formato de tabela resolve isso com uma camada de metadados que declara, a cada versão, quais arquivos compõem a tabela.
log de transações— Registro ordenado das operações sobre a tabela — quais arquivos entram e quais saem — que define o estado da tabela em cada versão.O que os três acrescentam sobre o Parquet cru:
- ACID por tabela: escrita atômica, leitura por snapshot consistente, concorrência controlada.
- Time travel: consultar a tabela como ela estava numa versão ou data anterior, enquanto os arquivos daquela versão existirem.
- Evolução de schema: acrescentar, renomear e alterar coluna de forma controlada, em vez de descobrir a mudança no erro de leitura.
- MERGE / upsert e delete: viabiliza aplicar CDC do core bancário e atender pedido de exclusão sob LGPD sem reescrever a tabela inteira.
- Compaction: juntar arquivos pequenos, que é o que mata performance em ingestão frequente.
| Formato de tabela | Origem e foco | Ponto forte | Considere quando |
|---|---|---|---|
| Delta Lake | Databricks; integração profunda com Spark | Maturidade no ecossistema Spark e Databricks, MERGE e time travel diretos | Sua plataforma é Databricks e o time já vive em Spark |
| Apache Iceberg | Netflix; tabelas muito grandes e multiengine | Particionamento oculto e evolução de partição sem reescrever a tabela; adoção ampla entre motores | Vários motores leem a mesma tabela e o particionamento vai mudar |
| Apache Hudi | Uber; ingestão incremental de baixa latência | Upsert eficiente e modo merge-on-read para escrita frequente | O caminho crítico é atualizar registros com frequência alta |
O custo que vem junto
Formato de tabela não é grátis. Você passa a operar metadado: rodar compaction para não acumular arquivo pequeno, definir retenção e rodar limpeza dos arquivos antigos, e decidir por quanto tempo o time travel precisa alcançar. Em banco essa decisão conversa direto com política de retenção e com pedido de exclusão sob LGPD — dado apagado da versão corrente ainda existe nas versões anteriores até a limpeza rodar.
Se quiser outro ângulo
Como cai na sabatina
“Por que Parquet é mais rápido que CSV para a mesma consulta?”
Erros comuns
- Dizer que Parquet é rápido 'porque é comprimido'. A compressão ajuda, mas o ganho principal vem de ler só as colunas pedidas e pular blocos inteiros pela estatística.
- Tratar Delta, Iceberg e Hudi como formatos de arquivo. São formatos de tabela: uma camada de metadados sobre arquivos que continuam sendo Parquet na maioria dos casos.
- Usar Parquet para stream de eventos com schema que muda toda semana. Formato colunar precisa de lote para render; Avro é feito para o caminho de escrita contínua.
- Achar que time travel é backup. É leitura de versões anteriores enquanto os arquivos existirem; a retenção é configurada e o vacuum apaga o que passou dela.
- Ignorar o problema de arquivo pequeno. Milhares de arquivos minúsculos matam a performance de leitura, e é por isso que compaction existe nos três formatos de tabela.
- Escolher formato de tabela pelo hype. O critério real é o motor que você usa, o padrão do time e o tipo de escrita: upsert frequente, batch grande ou multiengine aberto.
Flashcards
Card 1 de 14
0 certos · 0 a reverDrill
Qual formato para cada cenário?
Para cada situação do banco, escolha o formato e justifique em uma frase antes de conferir.
1.Eventos de autorização de cartão publicados continuamente num tópico, com schema que evolui a cada release.
2.Tabela histórica de seis anos de transações consultada por agregações mensais.
3.Tabela de transações que precisa receber MERGE diário de correções e permitir auditoria da versão anterior.
4.Arquivo enviado pelo regulador com cinco mil linhas para conferência manual.
5.Resposta de uma API de enriquecimento cadastral com estrutura aninhada e campos opcionais.
6.Tabela de mesma origem consumida por Spark, Trino e Athena de times diferentes, com particionamento que precisará mudar.
Quiz · 1 de 2
Qual afirmação sobre formatos de tabela é correta?
Explique para um gerente
Explique para o gerente de infraestrutura, sem falar em colunas e linhas, por que a mesma consulta sobre os mesmos dados custa dez vezes menos depois de trocar o formato do arquivo.
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
- · Por que Parquet é mais rápido que CSV para a mesma consulta?
- · O time quer trocar as tabelas Parquet do data lake por Delta. Qual o ganho concreto e qual o custo?
Para ir além