CSV to Parquet

Convert CSV to Parquet in your browser

Free CSV to Parquet converter, no signup, nothing uploaded. Drop a CSV up to 1.5 GB, check the column types DuckDB detected, press Export: a 13.7 MB CSV with 50,411 rows becomes a 4.3 MB Parquet file with zstd compression, typed columns included.

.csv.tsv
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).

Why Parquet instead of CSV

Parquet stores data by column, with a type for every column and compression on top. The CO2 sample on this page is 13.7 MB as CSV and 4.3 MB as zstd Parquet, with the same 50,411 rows and 79 columns. Readers like pandas, Polars, DuckDB, Spark, BigQuery and Snowflake only read the columns a query touches, so a 3-column query over a 79-column file skips 76 of them.

Types travel with the file. A CSV is text, so every tool that opens it guesses again whether 2019-04-01 is a date and whether 00501 is a number. In Parquet the decision is made once, here, where you can see the result before you export.

What the converter does with your CSV

The file is read by DuckDB inside your tab. It sniffs the delimiter (comma, semicolon, tab or pipe), the quoting, whether the first line is a header, and a type for each column. Files up to 50 MB are sniffed in full; bigger files are sampled. Malformed lines are skipped with a note at the top of the table, and if types can't be detected reliably every column falls back to text and the note says so.

The table you see is exactly what the Parquet file will contain, so check the column types in the header before exporting. If a column came out wrong, fix it with SQL first: SELECT CAST(zip AS VARCHAR) AS zip, * EXCLUDE (zip) FROM data keeps the rest of the columns and changes one.

Convert a slice instead of the whole file

Export writes the current view: the rows that pass your filter, the columns you left visible, in the sort order you set. Type year:>2000 country:Germany in the filter bar and Export writes only those rows. Hide a column and it stays out of the file.

Plain filters have no row cap, so a filtered export of a 1 GB CSV works. SQL results stop at 1,000,000 rows, so a SELECT with a GROUP BY or a LIMIT is the way to go when you want an aggregate rather than the raw rows.

Big files and the 1.5 GB line

Everything happens in the memory of one browser tab, so the ceiling is 1.5 GB per file. Above that a CSV loads partially, the note tells you how many rows made it, and the export only contains those rows. The 7.4 million row taxi sample is 685 MB as CSV, well under that line.

Past 1.5 GB, or for a nightly job, use the same engine on your machine: duckdb -c "COPY (SELECT * FROM read_csv('data.csv')) TO 'data.parquet' (FORMAT parquet, COMPRESSION zstd)". Same sniffer, same types, no size limit.

Share the Parquet file as a link

Press Share and the file is uploaded once, to a link that opens as a table on any device. Anonymous links take files up to 100 MB and are deleted 7 days after creation; sign in and keep up to 10 of them for free. Files over 16 MB that aren't Parquet yet are re-encoded to zstd Parquet in your browser before the upload when that makes them smaller, so the link downloads fast.

From a script, curl -T data.csv https://rows.page returns the link. Push the next export to the same link and the page shows how many rows are new, gone or changed.

Limits for converting CSV to Parquet

WhatLimit or price
Convert in the browserFiles up to 1.5 GB, $0, no account
InputCSV and TSV, comma, semicolon, tab or pipe delimited, header optional
OutputParquet with zstd compression and the detected column types
RowsNo cap through filters; SQL results export the first 1,000,000 rows
Type detectionWhole file up to 50 MB, sampled above that
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

Is my CSV uploaded to convert it?

No. Opening a file reads it inside your browser tab. It only leaves your machine if you share it or push it with curl.

Which compression does the Parquet file use?

zstd. It made the 13.7 MB CO2 CSV a 4.3 MB Parquet file. pandas with pyarrow, Polars, DuckDB, Spark and every warehouse that reads Parquet handles zstd.

Can I change column types before exporting?

Yes. Run a query like SELECT CAST(id AS BIGINT) AS id, * EXCLUDE (id) FROM data in the filter bar and then press Export. The Parquet file takes the types of the query result. SQL results are capped at 1,000,000 rows.

Does a CSV with 10 million rows work?

The limit is bytes, not rows: 1.5 GB per file. 10 million short rows fit, 10 million rows of long text may not. If the file loads partially, the note at the top says how many rows made it.

Can I convert an Excel file to Parquet?

Not directly. Save the sheet as CSV first (File, Save As, CSV UTF-8), then drop that file here.

More tools

Pushing data from a script or agent? Read the docs.