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.
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
| What | Limit or price |
|---|---|
| Convert in the browser | Files up to 1.5 GB, $0, no account |
| Input | CSV and TSV, comma, semicolon, tab or pipe delimited, header optional |
| Output | Parquet with zstd compression and the detected column types |
| Rows | No cap through filters; SQL results export the first 1,000,000 rows |
| Type detection | Whole 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
- CSV viewerOnline CSV viewer for big files
- Parquet viewerParquet viewer, no Python needed
- JSONL viewerJSONL viewer for logs, evals and traces
- JSON to tableJSON to table, nested fields included
- Past Excel's row limitExcel stops at 1,048,576 rows. Open the rest here.
- Parquet to CSVConvert Parquet to CSV in your browser
- JSON to CSVConvert JSON to CSV, nested objects included
- CSV to JSONConvert CSV to JSON or JSON Lines
- JSONL to CSVConvert JSONL to CSV in your browser
- TSV to CSVConvert TSV to CSV in your browser
- CSV to MarkdownTurn a CSV into a Markdown table
- SQL on CSVRun SQL on a CSV file in your browser
- Share a CSVShare a CSV as a link, not an attachment
- Version control for CSVVersion control for CSV files, without git
Pushing data from a script or agent? Read the docs.