Pular para o conteúdo principal

Explicação do Apache Parquet: Um guia para profissionais de dados

Neste guia detalhado sobre o Apache Parquet, você encontrará explicações claras e exemplos práticos de código!
Actualizado 11 de fev. de 2025  · 20 min de leitura

O Big Data pode ser esmagador e, muitas vezes, você acha que não há uma maneira fácil de gerenciá-lo. Mas, na realidade, o Apache Parquet torna isso muito mais fácil. É um formato de armazenamento de dados inteligente que lida com grandes conjuntos de dados, economizando tempo e recursos para você. 

Neste artigo, mostrarei a você o que torna o Parquet uma ferramenta única e como usá-lo em seus projetos. Ao final, você saberá por que ele é uma das principais opções para profissionais de dados e como começar a usá-lo com ferramentas como Python e Spark.

O que é o Apache Parquet?

O Apache Parquet é um formato de armazenamento colunar de código aberto que aborda os desafios do processamento de big data. Ao contrário do armazenamento tradicional baseado em linhas, ele organiza os dados em colunas. Essa estrutura permite que você leia apenas as colunas necessárias, tornando as consultas de dados mais rápidas e reduzindo o consumo de recursos.

Por exemplo, você pode direcionar os dados relevantes em vez de processar um conjunto de dados inteiro para encontrar um único atributo. Esse é o principal motivo (entre muitos outros, como veremos mais adiante) pelo qual o Parquet é uma opção natural para estruturas de big data como Apache Hadoop, Apache Spark e Apache Hive.  

Além das estruturas, o Parquet também é amplamente usado em lagos de dados e plataformas de análise. As equipes usam o Amazon S3, o Azure Data Lake Storage ou o Google Cloud Storage para armazenar conjuntos de dados em grande escala em um data lake. Como o Parquet é otimizado para consultas eficientes, ele é o formato preferido para armazenar dados estruturados e semiestruturados.

Por exemplo, no Amazon S3, um fluxo de trabalho típico pode envolver o uso do AWS Glue para catalogar arquivos Parquet e do Amazon Athena para executar consultas SQL sem carregar dados em um banco de dados.

Torne-se um engenheiro de dados

Torne-se um engenheiro de dados por meio do aprendizado avançado de Python
Comece a aprender de graça

Recursos do Apache Parquet

Vamos entender a arquitetura do Apache Parquet com seus principais recursos: 

Armazenamento colunar

Ao contrário dos formatos baseados em linhas, como o CSV, o Parquet organiza os dados em colunas. Isso significa que, quando executamos uma consulta, ela extrai apenas as colunas específicas de que precisamos, em vez de carregar tudo. Isso melhora o desempenho e reduz o uso de E/S.

Estrutura baseada em linhas ou colunas.

Estrutura baseada em linhas ou colunas. Imagem do autor.

Os arquivos Parquet são divididos em grupos de linhas, que contêm um lote de linhas. Cada grupo de linhas é dividido em partes de colunas, cada uma contendo dados para uma coluna. Esses blocos são divididos em partes menores, chamadas páginas, que são compactadas para economizar espaço.

Além disso, os arquivos Parquet armazenam informações extras no rodapé, chamadas metadados, que localizam e leem somente os dados de que precisamos. 

Aqui está a aparência da estrutura:

Estrutura interna do arquivo de parque.

Estrutura interna do arquivo Parquet. Imagem do autor. 

Vamos detalhar cada componente do diagrama acima.

Grupos de linhas

  • Um grupo de linhas contém várias linhas, mas armazena os dados em colunas para uma leitura eficiente.
  • Exemplo: Um conjunto de dados com 1 milhão de linhas pode ser dividido em 10 grupos de 100.000 linhas cada.

Partes de coluna

  • Em cada grupo de linhas, os dados são separados por colunas.
  • Esse design permite a poda colunar, em que podemos ler apenas as colunas relevantes em vez de examinar o arquivo inteiro.

Páginas

  • Cada bloco de coluna é dividido em páginas para otimizar o uso da memória.
  • Normalmente, as páginas são compactadas, reduzindo os custos de armazenamento.

Rodapé (metadados)

  • O rodapé no final de um arquivo Parquet armazena informações de índice:
    • Schema: Define tipos de dados e nomes de colunas.
    • Offsets de grupos de linhas: Ajuda a localizar dados específicos rapidamente.
    • Estatísticas: Valores mínimo/máximo para ativar o pushdown do predicado (filtragem no nível de armazenamento).

Compressão e codificação

Conforme mencionado, o Parquet comprime os dados coluna por coluna usando métodos de compactação como Snappy e Gzip. Ele também usa duas técnicas de codificação:

  • Codificação de comprimento de execução para armazenar valores repetidos de forma compacta.
  • Codificação de dicionário para substituir duplicatas por referências de dicionário.

Isso reduz o tamanho dos arquivos e acelera a leitura de dados, o que é especialmente útil quando você trabalha com big data.

Evolução do esquema

A evolução do esquema significa modificar a estrutura dos conjuntos de dados, como adicionar ou alterar colunas. Pode parecer simples, mas dependendo de como os dados são armazenados, a modificação do esquema pode ser lenta e exigir muitos recursos. 

Vamos entender isso comparando a evolução dos esquemas CSV e Parquet.

Suponha que você tenha um arquivoCSV com colunas como student_id, student_name e student_age. Se você quiser adicionar uma nova coluna scores, terá de fazer o seguinte:

  1. Ler o arquivo inteiro na memória.
  2. Atualize o cabeçalho para incluir uma nova coluna, scores.
  3. Adicione uma pontuação para cada aluno. Isso significa anexar valores para todas as linhas (mesmo que estejam faltando, você pode precisar de espaços reservados, como cadeias de caracteres vazias ou NULL).
  4. Salve tudo como um novo arquivo CSV.

O CSV é um formato simples baseado em texto, sem suporte a esquemas incorporados. Isso significa que qualquer alteração na estrutura requer a reescrita de todo o arquivo, e os sistemas mais antigos que lerem o arquivo modificado poderão falhar se esperarem uma estrutura diferente!

Com o Parquet, você pode adicionar, remover ou atualizar campos sem quebrar os arquivos existentes. Como vimos anteriormente, o Parquet armazena as informações do esquema no rodapé do arquivo (metadados), permitindo a evolução dos esquemas sem modificar os arquivos existentes.

Veja como isso funciona:

  • Quando você adiciona uma nova coluna, os arquivos Parquet existentes permanecem inalterados.
  • Os novos arquivos incluirão a coluna adicional, enquanto os arquivos antigos ainda seguirão o esquema anterior.
  • A remoção de uma coluna não requer o reprocessamento de dados anteriores; as consultas ignorarão a coluna ausente.
  • Se uma coluna não existir em um arquivo antigo, os mecanismos Parquet (como Apache Spark, Hive ou BigQuery) retornarão NULL em vez de interromper a consulta.
  • Os arquivos Parquet mais antigos podem ser lidos mesmo após modificações no esquema.
  • Os arquivos Parquet mais novos com colunas adicionais ainda podem ser lidos por sistemas que esperam um esquema mais antigo.

Adicionar uma coluna ao arquivo Parquet sem quebrá-lo.

Adicionar uma coluna ao arquivo Parquet sem quebrá-lo. Imagem do autor.

Suporte a idiomas e plataformas

O Parquet oferece suporte a diferentes linguagens de programação, como Java, Python, C++ e Rust. Isso significa que os desenvolvedores podem usá-lo facilmente, independentemente de sua plataforma. Ele também é integrado nativamente a estruturas de big data como Apache Spark, Hive, Presto, Flink e Trino, garantindo um processamento de dados eficiente em escala.

Portanto, quer você esteja usando Python (por meio do PySpark) ou outra linguagem, o Parquet pode gerenciar os dados de forma a facilitar a consulta e a análise em diferentes plataformas.

Se você não tem experiência com estruturas de Big Data, recomendo que faça o curso Introduction to PySpark. É uma ótima maneira de você começar. 

Como ler e gravar arquivos Parquet

Agora que você conhece os conceitos básicos do Apache Parquet, vou orientá-lo na gravação, leitura e integração dearquivos Parquet com o pandas, PyArrowe outras estruturas de Big Data, como o Spark.

Escreva arquivos Parquet usando pandas

Para salvar DataFrames como arquivos Parquet, você precisa do pandas e de um mecanismo Parquet como o PyArrow:

pip install pandas pyarrow

Agora, escreva um arquivo Parquet usando o código a seguir:

import pandas as pd

# Sample DataFrame
data = {
    "Name": ["Alice", "Bob", "Charlie"],
    "Age": [25, 30, 35],
    "City": ["New York", "Los Angeles", "Chicago"]
}
df = pd.DataFrame(data)

# Write to Parquet file
df.to_parquet("data.parquet", engine="pyarrow", index=False)

print("Parquet file written successfully!")

Escreva o arquivo Parquet com o pandas.

Escreva o arquivo Parquet com o pandas. Imagem do autor.

Ler arquivos Parquet usando pandas

Aqui está um código simples para você ler seu arquivo Parquet:

import pandas as pd

# Read the Parquet file
df = pd.read_parquet("data.parquet", engine="pyarrow")

print("Data from Parquet file:")
print(df)

Leia um arquivo Parquet com o pandas.

Leia o arquivo Parquet com o pandas. Imagem do autor.

Escrever arquivos Parquet usando PyArrow

O PyArrow é uma ferramenta do projeto Apache Arrow que facilita o trabalho com arquivos Parquet. Veja como você pode gravar um arquivo parquet usando o PyArrow:

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# Sample data
df = pd.DataFrame({
    "Name": ["Jacob", "Lauren", "Oliver"],
    "Age": [25, 30, 35],
    "City": ["New York", "Los Angeles", "Chicago"]
})

# Convert to a PyArrow table
table = pa.Table.from_pandas(df)

# Write to Parquet file
pq.write_table(table, "data.parquet")

print("Parquet file written successfully!")

Gravação de arquivo Parquet usando PyArrow

Escreva um arquivo Parquet com o PyArrow. Imagem do autor.

Ler arquivos Parquet usando PyArrow

Veja como você pode ler um arquivo Parquet usando o PyArrow:

import pyarrow.parquet as pq

# Read the Parquet file
table = pq.read_table("data.parquet")

# Convert to a pandas DataFrame
df = table.to_pandas()

print("Data from Parquet file:")
print(df)

Lendo um arquivo Parquet com o PyArrow.

Leia o arquivo Parquet com o PyArrow. Imagem do autor.

Integrar com estruturas de big data

Podemos usar o Spark para ler e gravar arquivos Parquet diretamente. Faça o download dono site do Apache Spark ou configure-o seguindo as instruções .

Quando terminar, importe as bibliotecas e crie um DataFrame: 

from pyspark.sql import SparkSession

# Initialize a Spark session
spark = SparkSession.builder.appName("SparkExample").getOrCreate()

# Define the schema for the dataset
schema = ["Name", "Age", "City"]

# Create a sample data
data = [
    ("Jacob", 30, "New York"),
    ("Lauren", 35, "Los Angeles"),
    ("Billy", 25, "Chicago")
]

# Create a DataFrame from the sample data
df = spark.createDataFrame(data, schema)

# Show the DataFrame
df.show()

Criando um dataframe de amostra no Spark.

Crie um DataFrame de amostra no Spark. Imagem do autor.

Em seguida, escreva esse DataFrame como um arquivo Parquet:

# Write DataFrame to Parquet
df.write.parquet("data.parquet")

O write.parquet() salva o DataFrame no formato Parquet, e o arquivo será chamado de employee.parquet. Agora, para ler esse arquivo Parquet, você pode usar o seguinte código:

# Read the Parquet file
parquet_df = spark.read.parquet("data.parquet")

# Show the DataFrame
parquet_df.show()

Ler o arquivo Parquet em um quadro de dados

Ler o arquivo Parquet. Imagem do autor. 

Além do Spark, o Parquet também pode trabalhar com o Hive. Quando você criar uma tabela do Hive, use STORED AS PARQUET para tornar o Parquet o formato de armazenamento.

Operações úteis com o Parquet

Além da leitura e da gravação, há algumas operações básicas que todo desenvolvedor deve conhecer, pois elas são úteis ao trabalhar com arquivos Parquet. Vamos analisá-las nesta seção.

Usarei o pandas e o PyArrow para ilustrar os conceitos.

Acrescentar dados a um arquivo Parquet existente

Anexar dados é útil quando novos registros precisam ser adicionados sem reescrever todo o conjunto de dados.

import pyarrow.parquet as pq
import pyarrow as pa

# Load existing Parquet file
existing_table = pq.read_table("data.parquet")

# New data
new_data = pd.DataFrame({
    "Name": ["David", "Emma"],
    "Age": [40, 28],
    "City": ["San Francisco", "Seattle"]
})

# Convert new data to PyArrow table
new_table = pa.Table.from_pandas(new_data)

# Concatenate both tables
merged_table = pa.concat_tables([existing_table, new_table])

# Write back to Parquet file
pq.write_table(merged_table, "data.parquet")

Ler somente colunas específicas de um arquivo Parquet

Em vez de carregar todo o conjunto de dados, você pode selecionar apenas as colunas necessárias, reduzindo o uso da memória e melhorando o desempenho. Isso é significativamente mais rápido do que ler o conjunto de dados completo:

df = pd.read_parquet("data.parquet", columns=["Name", "Age"])
print(df)

Filtragem de dados durante a leitura (predicado pushdown)

O Parquet permite uma filtragem eficiente no nível de armazenamento, conhecida como predicado pushdown, que evita o carregamento de dados desnecessários. Isso evita a varredura de todo o arquivo, tornando as consultas muito mais rápidas:

import pyarrow.parquet as pq

# Read only rows where Age > 30
table = pq.read_table("data.parquet", filters=[("Age", ">", 30)])

df = table.to_pandas()
print(df)

Mesclar vários arquivos Parquet

Em geral, os arquivos Parquet são armazenados em partições separadas. Você pode mesclá-los em um único arquivo Parquet. Isso é útil ao combinar conjuntos de dados de diferentes fontes:

import pyarrow.parquet as pq
import pyarrow as pa

# List of Parquet files to merge
file_list = ["data_part1.parquet", "data_part2.parquet"]

# Read all files and merge
tables = [pq.read_table(f) for f in file_list]
merged_table = pa.concat_tables(tables)

# Write merged Parquet file
pq.write_table(merged_table, "merged_data.parquet")

Converter CSV em Parquet

Se você tiver arquivos CSV existentes, a conversão deles em Parquet economiza espaço e acelera o processamento, o que reduz drasticamente o tamanho do arquivo e melhora o desempenho da leitura:

df = pd.read_csv("data.csv")
df.to_parquet("data.parquet", engine="pyarrow", index=False)

Partição de arquivos Parquet para consultas mais rápidas

O particionamento organiza os dados em subdiretórios com base em um valor de coluna, tornando as consultas significativamente mais rápidas.

Veja como você pode gravar dados particionados:

df.to_parquet("partitioned_data/", engine="pyarrow", partition_cols=["City"])

O código acima cria subdiretórios:

partitioned_data/City=New York/
partitioned_data/City=Los Angeles/
partitioned_data/City=Chicago/

Então, você pode ler apenas uma partição específica:

df = pd.read_parquet("partitioned_data/City=New York/")
print(df)

Isso acelera a análise, pois você verifica apenas as partições relevantes!

Use a compactação para otimizar o armazenamento

O Parquet oferece suporte a algoritmos de compactação como Snappy, Gzip e Brotli para reduzir o tamanho do arquivo:

df.to_parquet("compressed.parquet", engine="pyarrow", compression="snappy")

Práticas recomendadas para o uso do Apache Parquet

Quando comecei a usar o Apache Parquet, percebi que pequenos ajustes poderiam melhorar muito sua eficiência. Aqui estão algumas das minhas principais dicas para otimizar o Parquet em cenários do mundo real.

Escolha o codec de compactação correto

Se você quiser economizar armazenamento, codecs como Snappy ou Gzip podem ser as opções que você precisa - o Snappy oferece compactação e descompactação rápidas, perfeitas para cenários em que a velocidade é mais importante.

Por outro lado, o Gzip é ideal se você tiver pouco espaço de armazenamento, mas puder suportar leituras um pouco mais lentas. A chave é entender sua carga de trabalho - um codec mais rápido como o Snappy geralmente vence se você acessa arquivos com frequência. No entanto, o Gzip é melhor para dados de arquivo.

Particionar dados de forma eficaz

Divida seus dados em subconjuntos lógicos, como por exemplo, por data, região ou qualquer outro campo consultado com frequência, para reduzir a quantidade de dados examinados durante uma consulta. Certa vez, trabalhei com um conjunto de dados que continha anos de registros de transações e o particionei por ano e mês para buscar períodos específicos em segundos em vez de minutos. 

Monitorar a evolução do esquema

Sempre me certifico de que as novas colunas sejam adicionadas de forma a não interromper os processos existentes. Isso geralmente significa anexá-los em vez de modificar os existentes. Para isso, você pode usar o suporte à evolução de esquemas do Apache Spark para obter transições mais suaves. 

Apache Parquet versus outros formatos de dados

Vamos comparar o Parquet com outros formatos de armazenamento de dados. 

Parquet vs CSV

Já falamos sobre isso na postagem do blog, mas quero enfatizá-lo novamente: Parquet e CSV são dois formatos diferentes que tratam os dados de forma diferente.

O Parquet organiza os dados em colunas, enquanto o CSV os organiza em linhas. Quando você usa o Parquet, todos os dados da mesma coluna são agrupados, de modo que você pode extrair facilmente dados de colunas específicas sem ter que vasculhar todo o resto. Ele é mais rápido e ocupa menos espaço porque o Parquet comprime os dados.

Formato baseado em colunas Parquet.

Formato baseado em colunas Parquet. Imagem do autor.

O CSV, por outro lado, armazena os dados linha por linha. É simples e funciona bem para conjuntos de dados pequenos, mas não é ideal para os grandes. Toda consulta precisa ler a linha inteira, mesmo que você só precise de algumas colunas. Isso torna as coisas mais lentas e requer mais memória para processar.

Formato baseado em linhas CSV.

Formato baseado em linhas CSV. Imagem do autor.

Parquet vs JSON

O JSON é ótimo para estruturar dados de uma forma fácil de entender, mas tem uma desvantagem: não é muito eficiente em termos de armazenamento ou velocidade. Então, deixe-me explicar por que o Parquet é mais eficiente do que o JSON com um exemplo.

Suponhamos que você tenha uma tabela de dados de funcionários com três colunas: EmployeeID, Department, e Location:

EmployeeID

Departamento

Localização

1

HR

Nova York

2

HR

Nova York

3

HR

Nova York

4

TI

San Francisco

5

TI

San Francisco

Agora, se salvarmos esses dados como JSON, eles terão a seguinte aparência:

[
  {"EmployeeID": 1, "Department": "HR", "Location": "New York"},
  {"EmployeeID": 2, "Department": "HR", "Location": "New York"},
  {"EmployeeID": 3, "Department": "HR", "Location": "New York"},
  {"EmployeeID": 4, "Department": "IT", "Location": "San Francisco"},
  {"EmployeeID": 5, "Department": "IT", "Location": "San Francisco"}
]

Observe como o JSON repete nomes de colunas como EmployeeID, Department e Location para cada registro. Você também repete os valores de HR e New York várias vezes. Isso torna o arquivo muito maior e mais lento.

Agora vamos imaginar (porque o Parquet não é legível por humanos) que salvamos os mesmos dados que o Parquet:

  • EmployeeID: [1, 2, 3, 4, 5]
  • Departamento: [HR, HR, HR, IT, IT] (comprimido como HR: 3, IT: 2)
  • Localização: [Nova York, Nova York, Nova York, São Francisco, São Francisco] (comprimido como Nova York: 3, San Francisco: 2).

Em vez de armazenar linha por linha, o Parquet organiza os dados por colunas e comprime os valores repetidos.

Parquet x Avro

O Avro é um formato baseado em linhas. É excelente para tarefas como streaming de dados ou processamento de logs, em que você adiciona constantemente novos registros ou recupera linhas completas. Mas o formato baseado em colunas do Parquet é perfeito para análises. Se você executar consultas para analisar grandes quantidades de dados, o Parquet funcionará melhor. Ele extrai dados das colunas necessárias e ignora o restante para economizar tempo e recursos.

Em resumo, o Parquet é melhor para ler e analisar grandes conjuntos de dados, enquanto o Avro é ideal para gravar e armazenar dados de forma fácil de atualizar.

Aqui está uma tabela de comparação entre o Parquet e o Parquet . CSV vs. JSON vs. Avro, incluindo prós, contras e casos de uso:

Formato

Prós

Contras

Casos de uso

Parquet

Formato colunar para análises rápidas

Alta eficiência de compressão

Suporta a evolução do esquema

Otimizado para estruturas de big data (Spark, Hive, Presto)

Suporte a pushdown de predicados (filtragem eficiente)

Não legível por humanos

Mais lento para operações baseadas em linhas

Operações de gravação mais complexas

  • Processamento de big data (Hadoop, Spark, Hive)
  • Lagos de dados na nuvem (AWS S3, Azure Data Lake)
  • Cargas de trabalho analíticas e OLAP rápidas

CSV

Simples e legível por humanos

Fácil de gerar e analisar

Compatível com quase todas as ferramentas

Sem suporte a esquemas

Lento para grandes conjuntos de dados

Tamanhos de arquivo grandes (sem compactação)

Você deve verificar todo o arquivo em busca de consultas

  • Intercâmbio de dados (dados tabulares simples)
  • Conjuntos de dados pequenos e médios
  • Interoperabilidade com sistemas legados

JSON

Suporta dados aninhados e semiestruturados

Legível por humanos

Amplamente usado em APIs da Web

Esquema flexível

Tamanhos de arquivo maiores (devido ao formato de texto)

Lento para consultas de big data

Sem indexação nativa

  • APIs da Web e bancos de dados NoSQL (MongoDB, Elasticsearch)
  • Aplicativos de streaming
  • Armazenamento de registros ou dados semiestruturados

Avro

Formato baseado em linhas para gravações rápidas

Formato binário compacto (armazenamento eficiente)

Suporta a evolução do esquema

Bom para streaming e filas de mensagens

Não legível por humanos

Menos eficiente para consultas analíticas em comparação com o Parquet

Requer bibliotecas Avro para processamento

  • Streaming e processamento em tempo real (Kafka, Flink)
  • Armazenamento de longo prazo com alterações de esquema
  • Serialização eficiente de dados

Quando usar o Apache Parquet

Em resumo, aqui estão algumas situações em que o Parquet é a melhor opção:

  • Cargas de trabalho pesadas de análise: O formato colunar do Parquet nos permite buscar apenas os dados de que precisamos, o que acelera as consultas e economiza tempo. Eu vi isso na prática ao processar conjuntos de dados com o Apache Spark - consultas que antes levavam minutos foram executadas em segundos devido à estrutura eficiente do Parquet.
  • Arquiteturas de data lake: Quando você cria um lago de dados, os custos de armazenamento aumentam rapidamente. Mas os recursos de compactação do Parquet reduzem o tamanho dos dados armazenados para ajudar você a economizar no armazenamento sem sacrificar o desempenho. 
  • Casos de uso que envolvem grandes conjuntos de dados: O Parquet lida perfeitamente com conjuntos de dados grandes e complexos, especialmente aqueles com estruturas aninhadas ou hierárquicas. Seu suporte para tipos de dados avançados e evolução de esquemas garante que você possa adaptar seus dados à medida que os requisitos mudam.

Considerações finais

O Apache Parquet é perfeito para lidar com big data. Ele é rápido, economiza espaço de armazenamento e funciona com ferramentas como o Spark. Se você está animado para saber mais, confira os seguintes recursos :

  • Curso Introduction to Databricks para você entender o Databricks, uma plataforma de dados unificada para otimizar os fluxos de trabalho de Big Data.
  • Curso Cleaning Data with PySpark para limpeza e pré-processamento de conjuntos de dados usando o PySpark.
  • Big Data com PySpark: trilha para dimensionar o processamento de dados com o Apache Spark usando a API do PySpark.

Aprimore suas habilidades com o PySpark

Aumente suas habilidades com dados dominando o Apache Spark.

Perguntas frequentes

Como o Parquet se compara ao ORC (Optimized Row Columnar)?

Tanto o Parquet quanto o ORC são formatos de armazenamento colunar otimizados para big data, mas o ORC é usado principalmente no ecossistema do Hadoop (especialmente com o Hive), enquanto o Parquet tem suporte mais amplo no Spark, Presto e outras estruturas de big data. O ORC oferece melhor compactação para dados altamente estruturados, enquanto o Parquet é mais flexível com a evolução do esquema e funciona bem em diferentes ambientes.

O Parquet pode lidar com a ingestão de dados em tempo real ou é usado principalmente para processamento em lote?

O Parquet foi projetado principalmente para processamento em lote, mas não é ideal para ingestão de streaming em tempo real. No entanto, existem algumas soluções alternativas:

  • Kafka + Parquet: Você pode armazenar dados de streaming no Avro primeiro e convertê-los periodicamente em Parquet para análise.
  • Delta Lake/Iceberg: Esses formatos estendem o Parquet para suportar gravações em tempo real e transações ACID, tornando o Parquet mais utilizável em cenários de tempo real.

Quais são as práticas recomendadas para armazenar arquivos Parquet em lagos de dados na nuvem?

Aqui estão algumas práticas recomendadas para otimizar o desempenho do Parquet em ambientes de nuvem (AWS S3, Azure Data Lake, GCS):

  • Particionamento: Armazene arquivos com base em partições lógicas (por exemplo, year/month/day ) para acelerar as consultas.
  • Compressão: Use o Snappy para leituras rápidas ou o Gzip/Zstd para obter melhores taxas de compactação.
  • Otimização do tamanho do arquivo: Procure obter de 100 MB a 1 GB por arquivo para equilibrar o desempenho da leitura e a sobrecarga de metadados.
  • Poda de colunas: Consultar somente as colunas necessárias para reduzir a E/S.
  • Use mecanismos com reconhecimento de parquet: Faça consultas com o Athena, BigQuery ou Spark em vez de varreduras de arquivos brutos.

Como posso atualizar ou excluir registros em um arquivo Parquet?

O Parquet não oferece suporte a atualizações ou exclusões no local, pois é otimizado para gravações somente de acréscimo. No entanto, você pode usar o Delta Lake/Apache Iceberg (camadas de armazenamento compatíveis com ACID sobre o Parquet) para atualizações e exclusões.

Você também pode usar uma solução alternativa para o pandas/Spark: Leia o arquivo Parquet, filtre os registros e grave um novo arquivo:

df = pd.read_parquet("data.parquet")
df = df[df["Name"] != "Alice"]  # Delete Alice's record
df.to_parquet("data.parquet", index=False)

Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Sou um estrategista de conteúdo que adora simplificar tópicos complexos. Ajudei empresas como Splunk, Hackernoon e Tiiny Host a criar conteúdo envolvente e informativo para seus públicos.

Temas

Saiba mais sobre engenharia de dados com estes cursos!

curso

Introduction to Data Engineering

4 hr
116.4K
Learn about the world of data engineering in this short course, covering tools and topics like ETL and cloud computing.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
Big Data Concept

blog

Como se tornar um arquiteto de dados

Saiba o que faz um arquiteto de dados e como iniciar uma carreira lucrativa nesse nicho em rápida expansão.
Moez Ali's photo

Moez Ali

11 min

blog

Contratos de dados desmistificados: Tudo o que você precisa saber

Obtendo escalabilidade em sistemas de dados distribuídos e reduzindo erros.
Mike Shakhomirov's photo

Mike Shakhomirov

24 min

tutorial

Primeiros passos com o AWS Athena: Um guia prático para iniciantes

Este guia prático ajudará você a começar a usar o AWS Athena. Explore sua arquitetura e seus recursos e saiba como consultar dados no Amazon S3 usando SQL.
Tim Lu's photo

Tim Lu

28 min

tutorial

Tutorial de armazenamento do AWS: Uma introdução prática ao S3 e ao EFS

O guia completo para armazenamento de arquivos no AWS com S3 e EFS.
Zoumana Keita 's photo

Zoumana Keita

16 min

tutorial

Tutorial do Pyspark: Primeiros passos com o Pyspark

Descubra o que é o Pyspark e como ele pode ser usado, com exemplos.
Natassha Selvaraj's photo

Natassha Selvaraj

10 min

tutorial

Hierarquias do Power BI: Um guia abrangente

Saiba como criar, editar, excluir e implementar hierarquias no Power BI.
Joleen Bothma's photo

Joleen Bothma

11 min

Ver maisVer mais