CSV vs Parquet: When to Switch to Columnar Storage
Parquet consistently beats CSV on size and query speed at scale, but that's not the same as "always use Parquet." The tradeoff is real, and for a lot of everyday CSV work, it's not worth making.
The Fundamental Difference: Row-Based vs Column-Based
CSV stores data row by row, everything about record 1, then everything about record 2, and so on. Parquet stores data column by column, every value in column A together, then every value in column B. This single design difference is what drives everything else.
Why Column Storage Wins on Analytics Queries
A typical analytics query touches a handful of columns out of dozens (e.g. "average revenue by region" only needs the revenue and region columns). In CSV, the engine still has to read every column of every row to get there. In Parquet, it can read only the columns the query actually needs, skipping the rest entirely, which is why Parquet queries over large datasets are often dramatically faster.
Parquet also compresses better: similar values stored together (a column of dates, a column of the same few category strings) compress far more efficiently than the same values scattered across mixed rows, which is why Parquet files are typically a fraction of the size of the equivalent CSV.
What You Give Up
- Human readability. You can't open a Parquet file in a text editor or casually skim it, it requires a tool that understands the format.
- Universal compatibility. Every tool on earth can read CSV. Parquet requires a library or engine that supports it, not every lightweight or legacy tool does.
- Easy row-by-row editing. CSV is trivial to hand-edit a single value in. Parquet isn't designed for that at all.
When Parquet Is Worth It
- You're repeatedly querying the same large dataset (millions+ of rows), not just processing it once
- Your queries typically touch a subset of columns, not the whole row
- Storage cost or transfer time matters at your data volume
- Your tooling (Spark, BigQuery, most modern data warehouses) natively supports it
When to Stay With CSV
- The file is a one-off export, import, or exchange between systems, not a repeated query target
- Human readability or easy manual editing matters
- You need maximum compatibility with tools that don't support Parquet
- The dataset is small enough that the performance difference doesn't matter in practice
Rule of thumb: CSV for exchange and one-off work, Parquet for a dataset you'll query repeatedly at scale.
What About JSON vs Parquet?
JSON and Parquet solve different problems, so this isn't really a size-vs-speed tradeoff like CSV vs Parquet, it's a structure question. JSON is a row-oriented, text-based format built for nested, hierarchical data (an API response, a config file with objects inside objects). Parquet is column-oriented and binary, built for flat, tabular data you'll query repeatedly at scale.
In practice: JSON wins when your data has genuine nested structure and you're passing it between services or reading it by hand. Parquet wins once that data is flattened into rows and columns and you're running analytical queries over millions of records, it's typically 5-10x smaller than the equivalent JSON and dramatically faster to query, because JSON's repeated keys per record are exactly the kind of redundancy columnar storage and compression eliminate. Some pipelines use both: JSON as the interchange format between services, Parquet as the storage format once that data lands in a warehouse or data lake.
Doing This in How To CSV
Convert between CSV and Parquet directly in your browser when the tradeoff makes sense for your workload, no server round-trip required for either direction.
Turn this into a saved workflow
Create a free account to save the steps from this guide as a reusable workflow and re-run it on any file, from any device.