Free Parquet Viewer Online

Drop a .parquet file below and read it here. The decoder is real DuckDB compiled to WebAssembly, so compression, nested types and decimals all work, the row count is a genuine count, and the grid sorts, filters and exports. Nothing is uploaded.

Parquet is not a file you can peek at

A CSV is bad at a lot of things, but it has one enormous virtue: you can look at it. Open it in anything and the first line tells you what the columns are. Parquet gives that up on purpose. It is columnar, it is compressed per column chunk, it carries a schema and statistics in a footer, and none of it is readable without a decoder. Open one in a text editor and you get PAR1 followed by binary.

Which is fine when you are in a notebook with pyarrow already imported. It is much less fine when a colleague sends you a 40 MB extract, or when a pipeline drops a file in a bucket and you want to know whether the run produced anything sensible, and you are on a laptop with no Python environment and no appetite for building one to answer a five-second question.

That is what this page is. Drop the file and it decodes locally, in the tab. There is no install, no notebook, no cluster and no upload. The trade normally made by browser-based Parquet tools is that they use a lightweight pure-JavaScript decoder, which is smaller to download but supports a narrower slice of the format, so a file with Zstd compression or a decimal column or a nested struct is where it stops.

This one does not make that trade. It runs DuckDB compiled to WebAssembly, the same engine plenty of teams use on the server side. It is about four megabytes on first use and cached after that, and in exchange you get essentially the whole format: Snappy, Gzip, Zstd, LZ4 and Brotli, dictionary and run-length encodings, nested structs and lists, decimals, timestamps with time zones. The row count comes from a real COUNT(*) rather than from a header, and the values in the grid are rendered by the same code that would write them to a CSV.

What you get

A real decoder

DuckDB-WASM, not a partial pure-JS reader. If DuckDB can read your Parquet, this page can show it, including the compression codecs and logical types that stop lighter viewers.

An honest row count

The summary reports a genuine count over the file. When the file has more rows than the grid loads, the warning says the exact total and the exact number shown rather than leaving you to wonder.

Dates that read as dates

A DATE column is rendered the way DuckDB writes it, not as the epoch integer sitting underneath. That single detail is the difference between a readable table and a wall of thirteen-digit numbers.

Sort, filter, freeze

Click a header to sort, filter as you type across all columns or one, and pin up to three columns so the key stays on screen while you scroll a wide schema sideways.

Column statistics

The sigma in a header gives blanks, distinct count, min, max, mean, median, sum and the five most common values, which is usually the whole reason you opened the extract.

Nested data kept intact

Structs and lists are shown as JSON in their cell rather than flattened into columns that would misrepresent the schema. What is in the file is what you see.

Copy a range

Select cells and Copy as TSV to paste into a spreadsheet, CSV for a script, Markdown for a ticket, or JSON for code. Ctrl or Cmd plus C copies as TSV directly.

Export the view

Download CSV or .xlsx writes what is on screen after your sort and filter, which turns "the twelve failing rows out of four hundred thousand" into a file you can send.

SQL is one click away

Open in Data Explorer carries the file across to full DuckDB SQL: joins, window functions, GROUP BY, CTEs. No opt-in, no second engine, no extra download beyond the one already made.

A worked example

The Try with sample data link loads an orders extract. Within a couple of seconds of the engine warming up, the summary strip reads something like 200 rows · 6 columns · read with DuckDB and the grid appears.

The first thing worth checking on any Parquet file you did not write is the header badges. A column named order_date badged date means the writer stored a real date type; badged text, it means somebody wrote dates as strings, and every downstream date filter will be a string comparison. A column named amount badged num / currency is numeric; badged text, the pipeline that produced this file has a bug and you have found it in ten seconds without writing any code.

Click the sigma on the amount column. You get the count of non-blank values, how many are blank, how many distinct, and min, max, mean, median and sum. A sum that is off by a factor of a thousand, or a min of zero where zero should be impossible, is the kind of thing that takes a notebook five minutes and takes this page one click.

Then filter to what matters, sort it, and use Download CSV to hand the subset to somebody who does not have a Parquet reader. Or use Open in Data Explorer, where the same file becomes a table you can write real SQL against, join to a second file, and build a chart from.

Limits worth knowing

  • One file, not a dataset. Parquet is often written as a directory of part files with a Hive-style partition layout. This page reads one file. To query a whole partitioned dataset you want the full editor, or DuckDB on your own machine.
  • The engine downloads once. DuckDB-WASM is roughly four megabytes on first use and cached afterwards, so the first Parquet file you open on a cold cache is slower than the second. Nothing of yours is sent anywhere in the process.
  • Two million rows in the grid. Files larger than that open and report their true size, and the grid holds the first two million. The ceiling is the browser tab's memory, not the format.
  • No writing. This is a viewer. Turning a table back into Parquet is what CSV to Parquet is for.
  • Encrypted Parquet is not supported. Column-level encryption needs keys this page has no way to hold.

Frequently Asked Questions

How do I open a .parquet file without Python or Spark?

Drop it on the box at the top of this page. There is no pandas, no pyarrow, no notebook, no cluster and no install: the file is decoded in your own browser tab and drawn as a table you can sort, filter and export. It is the fastest way to answer what is in this file when the file arrived by email and you are not at your usual machine.

Which Parquet features does this actually support?

The decoder is DuckDB compiled to WebAssembly, the same engine used on the server side of a great many data stacks, so the answer is essentially everything DuckDB reads. That includes Snappy, Gzip, Zstd, LZ4 and Brotli compression, dictionary and RLE encodings, nested structs and lists, and the full range of logical types including decimals, timestamps with time zones, and dates.

Is the row count real or an estimate?

Real. The count comes from a COUNT(*) over the file, not from a page header or a sample, so it is the number of rows the file contains. The grid then loads up to two million of them for display; when the file has more, a warning above the table says the exact total and how many are shown.

Does my Parquet file get uploaded?

No. The file is registered with the in-browser DuckDB instance and read from your own memory. There is no upload endpoint on this page. The DuckDB WebAssembly engine itself is fetched from a CDN on first use, which is about four megabytes and is cached afterwards, but your data goes nowhere.

Why do nested columns show as JSON text?

Because a struct or a list is not a cell. A column holding {"city": "Austin", "state": "TX"} is rendered as that JSON so you can read it and copy it, rather than being flattened into columns that would then disagree with the file's real schema. If you want those fields as their own columns, open the file in the full editor and use SQL to unnest them.

How large a Parquet file can this open?

250 MB of compressed Parquet, which is a great deal of data given the format's compression ratios. The grid only renders the rows on screen, so display cost does not grow with the file. Above 250 MB the full editor handles up to 1 GB and gives you SQL over the file rather than just a view of it.

Can I get the data out as CSV or Excel?

Yes. Download CSV and .xlsx write the current view, so sorting and filtering first gives you exactly the subset you want rather than the whole file. For a fragment, select a range of cells and use Copy as for TSV, CSV, a Markdown table or JSON.

Can I run SQL against the file here?

Not on this page, which is a viewer. The engine underneath it is full DuckDB, though, so Open in Data Explorer carries the file across and gives you real SQL over it with no opt-in and no second engine: joins, window functions, GROUP BY and CTEs against your Parquet directly.

Look inside the Parquet file

No Python, no notebook, no cluster, no upload. A real decoder and a real row count.

Back to the viewer