Curated open-source tools · Python-first · Spanish & English

The catalogue

Nº06 · Storage

Apache Parquet

The columnar format that makes file-based analytics cheap and fast.

FormatIntroData Engineer·Data Scientist

What is it?

Apache Parquet is an open, binary, columnar file format designed to store tabular data efficiently for analytics. Unlike a CSV —which stores data row by row as text— Parquet groups values by column, adds compression, and stores statistics (min, max) for each block.

The result: much smaller files and much faster queries. It is the de facto format of modern analytical storage: data lakes, lakehouses (Iceberg, Delta), and nearly every OSS engine read it natively.

What is it for?

  • Storing tables for analytics. It is the natural output of a data pipeline: a fraction of the size of CSV and faster to query.
  • Selective reads (column pruning). A query using 3 of 40 columns reads only those 3 from disk. On a CSV you'd have to read the whole thing.
  • Interoperating across tools. pandas, Polars, DuckDB, Spark, Trino, and warehouses read and write Parquet — it is the common language for moving data without lock-in.
  • The basis of table formats. Iceberg and Delta Lake store their data as Parquet files underneath, adding transactions and versioning on top.

When to use it / when not

Use it whenever you store data to read it analytically: pipeline outputs, intermediate lake layers, datasets you share across tools. It is almost always a better choice than CSV at serious volumes.

Think twice for:

  • Transactional workloads with frequent row-by-row writes/updates: a database like PostgreSQL is right. Parquet is for reading, not mutating record by record.
  • Exchange with humans or text-expecting tools (open in Excel, a simple script): a CSV is more universal for that one-off case.
  • Updates/deletes on the lake: if you need to modify already-written data with guarantees, step up to Iceberg or Delta (which use Parquet underneath).

Get started in 1 minute

With DuckDB you convert a CSV to Parquet and see the difference, no server:

pip install duckdb
import duckdb

# Write a sample table to Parquet (compressed and columnar)
duckdb.sql("""
  COPY (SELECT * FROM (VALUES ('PE', 100), ('CL', 80)) AS t(country, amount))
  TO 'sales.parquet' (FORMAT parquet)
""")

# Read only the column you need — without loading the rest
print(duckdb.sql("SELECT country FROM 'sales.parquet'").df())

Quick trivia — test what you just read.

How much do you know about Apache Parquet?

Official documentation

The source of truth lives there. Here we orient you; the depth is up to you.

Open official docs

What to learn next

See also

KioskoAI mailbox

Anything missing from the Apache Parquet guide?

This decides what gets written next. If it only half-helped, say so.

Type of feedback
0/2000

No spam. Email is optional and only used to reply to you.

Nº06 · Updated 2026-06-25