Cookies para estatística e publicidade
Usamos cookies de estatística e de publicidade, ambos enviados ao Google. Recusar não muda nada do que você vê.Ler a página de privacidade
Parquet
Armazenamento por colunas para grandes volumes. Bem menor e bem mais rápido de consultar que um CSV.
Parquet
Parquet é um formato binário, que só significa alguma coisa para um programa que o conhece. Ele é usado para o arquivamento e mover dados entre programas.
A extensão é .parquet e o nome por extenso é Apache Parquet. Os dois importam menos do que aquilo que o arquivo consegue carregar, e é disso que trata o resto desta página.
A Apache Software Foundation publicou o formato em 2013.
A idade interessa por um motivo prático: quanto mais antigo o formato, mais programas tiveram tempo de aprendê-lo.
Ela está publicada por inteiro, então dá para implementá-la a partir do documento em vez de por observação — é por isso que o formato aparece em tantos programas e por isso que arquivos escritos há vinte anos ainda abrem. Especificação publicada não é o mesmo que livre de royalties: quando o formato embrulha um codec, o licenciamento das patentes é uma questão à parte, que a norma não resolve.
Parquet guarda o conteúdo exatamente. Salvar de novo não muda nada, então dá para abrir, editar e salvar quantas vezes você quiser sem acumular estrago — e é isso que faz dele um formato de trabalho e não de entrega.
Parquet traz uma soma de verificação, para que um arquivo danificado seja detectado em vez de lido errado em silêncio e criptografia opcional.
Um arquivo criptografado precisa ser destrancado antes que qualquer coisa possa convertê-lo, aqui e em qualquer outro lugar. Uma senha não é algo que um conversor contorne, e a um que dissesse o contrário você não deveria entregar o arquivo de jeito nenhum.
pandas, Apache Spark e DuckDB leem esse formato, e a maioria dos programas do mesmo tipo também.
Quando um arquivo não abre, o formato raramente é o problema — mais comum é o programa ser mais antigo que ele. Converter para algo mais antigo é o caminho confiável, e é para isso que serve o resto deste site.
Nenhum navegador lê o formato.
Esse é de longe o motivo mais comum para convertê-lo: não que o formato seja ruim, mas que o lugar onde você quer mostrar o arquivo não consegue lê-lo.
Parquet foi feito para ser entregue, não para se trabalhar dentro dele. Editar um é possível e raramente agradável; o caminho sensato passa pelo original e por uma nova exportação.
As reclamações que se repetem: fora do próprio terreno o suporte é irregular.
Nada disso é motivo para evitar o formato. São as coisas que vale conhecer antes que uma delas te pegue de surpresa, o que é uma afirmação diferente e mais útil.
Um CSV escreve um registro de cada vez: nome, data, país, valor, depois o próximo registro. O Parquet escreve uma coluna de cada vez: todos os nomes juntos, depois todas as datas, depois todos os países.
Esse único rearranjo é o formato inteiro. Parece uma preferência de arquivamento e muda a economia de tudo o que vem depois, porque uma consulta que quer duas colunas de cinquenta consegue ler exatamente essas duas e pular o resto, e porque uma coluna de valores parecidos comprime muito melhor que uma linha de valores sem relação entre si.
Valores dentro de uma coluna se parecem — datas se parecem com datas, códigos de país se repetem, valores compartilham uma ordem de grandeza — e é essa semelhança que a compressão explora. O Parquet também codifica com inteligência antes de comprimir: uma coluna com poucos valores distintos vira um dicionário e uma lista de inteiros pequenos, e uma sequência de valores idênticos vira uma contagem.
O resultado costuma sair de cinco a dez vezes menor que o mesmo dado em CSV, e às vezes bem mais para tabelas largas com colunas repetitivas. É uma economia direta de armazenamento e, mais importante, de tempo de transferência para tudo que lê o arquivo.
Um CSV não tem tipo nenhum, então todo consumidor precisa adivinhar — e é aí que zeros à esquerda somem e identificadores viram data. O Parquet registra o tipo de cada coluna no próprio esquema: isto é um inteiro de 64 bits, isto é uma string, isto é um timestamp com fuso horário, isto é um decimal com esta precisão.
Então o dado chega significando o que significava. Nada é inferido, nada depende de configuração regional, e uma coluna de CEPs continua sendo uma coluna de CEPs. Para qualquer coisa transitando entre sistemas, esse é um benefício prático maior que a própria compressão.
O Parquet é organizado em grupos de linhas, e cada um registra estatísticas por coluna — o mínimo, o máximo, quantos nulos. Uma consulta filtrando por uma faixa de datas pode ler essas estatísticas, ver que um grupo inteiro está fora da faixa, e pular sem descomprimir nada.
É por isso que uma consulta sobre um Parquet grande pode ser dramaticamente mais rápida que a mesma consulta sobre CSV, além da leitura de menos colunas. Isso também explica por que particionar um conjunto de dados por data numa estrutura de pastas — uma pasta por dia — funciona tão bem: o motor pula arquivos inteiros antes mesmo de começar.
Ler um registro isolado. Reconstruir uma linha significa juntar um valor de cada coluna, que é exatamente o padrão de acesso para o qual o layout não foi construído. Parquet é um formato de análise, não um banco de dados.
Adicionar linhas. Um arquivo é escrito por inteiro, com suas estatísticas e rodapé calculados no final, então acrescentar uma linha significa reescrever ou criar um novo arquivo. Dados em streaming, portanto, chegam como muitos arquivos pequenos e são compactados depois, o que é uma parte normal de operar um data lake e um incômodo se ninguém planejou para isso.
E ser inspecionado a olho. É binário — um editor de texto não mostra nada útil, e conferir um arquivo exige uma ferramenta.
A barreira ficou mais baixa do que era. O DuckDB lê um Parquet diretamente com uma única consulta SQL e instala em segundos. Python com pandas ou Polars lê um em uma linha. Vários visualizadores desktop gratuitos abrem como se fosse uma planilha.
Converter para CSV é a outra rota, certa quando um colega precisa dos dados numa planilha — aceitando que os tipos voltam a ser palpite e o arquivo fica várias vezes maior. Mantenha o Parquet como fonte e gere o CSV para quem pediu.
Em qualquer lugar onde dado é analisado em escala: data lakes em nuvem, Spark e Databricks, exportações do Snowflake e do BigQuery, AWS Athena, pipelines dbt, e cada vez mais em análises comuns de Python, onde silenciosamente substituiu o CSV como jeito padrão de salvar um dataframe.
Também está virando o formato em que órgãos públicos e projetos de pesquisa publicam conjuntos de dados grandes, justamente porque a alternativa — um CSV de dois gigabytes que ninguém consegue abrir numa planilha de qualquer jeito — não serve a ninguém. Se te entregaram um, quase certamente é por isso.
| Extensão | .parquet |
|---|---|
| Tipo de mídia | application/vnd.apache.parquet |
| Publicado por | Apache Software Foundation |
| Primeira publicação | 2013 |