Pular para o conteúdo

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 ver

Uma consulta soma o valor de transações de um mês, sobre uma tabela com 60 colunas. Por que Parquet vence CSV?

Confiança:

Vídeo · português · 18 min

Mostra a diferença medindo, não afirmando. Observe o tamanho no disco e o tempo de leitura de cada formato e guarde a ordem de grandeza para citar na resposta.

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:

  1. 1Column pruning: a consulta lê só as colunas que usa. Em tabela de 60 colunas usando 3, você lê 5% do arquivo.
  2. 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.
  3. 3Compressão por coluna: valores do mesmo tipo vizinhos permitem codificação por dicionário e por repetição, reduzindo bytes lidos do S3.
FormatoOrientaçãoSchemaCompressãoOnde brilhaOnde perde
CSVLinhaNenhumExterna, do arquivo inteiroTroca simples, leitura humanaEscala analítica, tipagem, nulos
JSONLinhaImplícitoExternaEstrutura aninhada, saída de APIVolume repetido de chaves, parsing caro
AvroLinhaEmbutido, com evoluçãoPor blocoStream, escrita contínua, integraçãoConsulta analítica por poucas colunas
ParquetColunaEmbutido no rodapéPor coluna, com dicionárioAnalytics em Spark, Databricks, AthenaEscrita incremental fina, leitura humana
ORCColunaEmbutidoPor coluna, com índices internosEcossistema Hive e Trino sobre HiveMenos 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çõesRegistro 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 tabelaOrigem e focoPonto forteConsidere quando
Delta LakeDatabricks; integração profunda com SparkMaturidade no ecossistema Spark e Databricks, MERGE e time travel diretosSua plataforma é Databricks e o time já vive em Spark
Apache IcebergNetflix; tabelas muito grandes e multiengineParticionamento oculto e evolução de partição sem reescrever a tabela; adoção ampla entre motoresVários motores leem a mesma tabela e o particionamento vai mudar
Apache HudiUber; ingestão incremental de baixa latênciaUpsert eficiente e modo merge-on-read para escrita frequenteO 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

Faz a ponte de formato de arquivo para formato de tabela. Preste atenção em como o log de transações é apresentado: é ele que você precisa saber descrever em voz alta.

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 rever

Drill

Qual formato para cada cenário?

Para cada situação do banco, escolha o formato e justifique em uma frase antes de conferir.

  1. 1.Eventos de autorização de cartão publicados continuamente num tópico, com schema que evolui a cada release.

  2. 2.Tabela histórica de seis anos de transações consultada por agregações mensais.

  3. 3.Tabela de transações que precisa receber MERGE diário de correções e permitir auditoria da versão anterior.

  4. 4.Arquivo enviado pelo regulador com cinco mil linhas para conferência manual.

  5. 5.Resposta de uma API de enriquecimento cadastral com estrutura aninhada e campos opcionais.

  6. 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?
Responder no simulado

Para ir além