How to check a Parquet file's schema and column stats
A Parquet file stores its schema in the footer, so you can see every column and type without reading the rows. In Parquet Reader, click Columns for names and types, then right-click a column header and choose View Statistics for null counts and min and max values. No code is needed and nothing is uploaded.
Check it in Parquet Reader
- Open the file. The card at the top shows the row and column counts.
- Click Columns or press โโงB. The sidebar lists every column with its type, such as
BIGINT,VARCHAR,DOUBLEorDATE. - Right-click a column header and choose View Statistics.
The statistics sheet shows:
- Count, Null Count and Unique Values. Unique Values stops counting at 10,000 and shows
> 10,000above that. - Min Value and Max Value. These are not shown for boolean and binary columns.
- Mean, Median and Std Dev for numeric columns.
The statistics in the file are optional
Parquet can store min, max and null count for each column in each row group. A writer may leave them out, so they are not guaranteed. A file written with write_statistics=False in pyarrow has none at all.
Parquet Reader calculates its numbers from the data itself, so a file without stored statistics still gets a full sheet. The trade-off is that the app has to read the column, which takes longer on a large file than reading the footer.
Other ways to read the schema
DuckDB command line
Column names and types:
duckdb -c "DESCRIBE SELECT * FROM 'orders.parquet'"
The statistics stored in the file, one line per column per row group:
duckdb -c "SELECT path_in_schema, type, stats_min_value, stats_max_value, stats_null_count FROM parquet_metadata('orders.parquet')"
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ path_in_schema โ type โ stats_min_value โ stats_max_value โ stats_null_count โ
โ varchar โ varchar โ varchar โ varchar โ int64 โ
โโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ order_id โ INT64 โ 1001 โ 1005 โ 0 โ
โ status โ BYTE_ARRAY โ paid โ refunded โ 0 โ
โ country โ BYTE_ARRAY โ DE โ UA โ 0 โ
โ amount โ DOUBLE โ 15.5 โ 120.0 โ 1 โ
โ order_date โ INT32 โ 2026-01-03 โ 2026-02-02 โ 0 โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโ
Two things to read carefully here. type is the physical type: the date is stored as INT32 and text as BYTE_ARRAY, while DESCRIBE shows DATE and VARCHAR. And on a file written without statistics, the last three columns are all NULL. That means nothing was stored, not that the column is empty.
pyarrow
import pyarrow.parquet as pq
f = pq.ParquetFile("orders.parquet")
print(f.schema_arrow)
print(f.metadata.num_rows, f.metadata.num_row_groups)
print(f.metadata.row_group(0).column(3).statistics)
parquet-cli prints the same footer information from a terminal.
What the free version does not do
Everything on this page is free. Opening a folder of files as one dataset is Pro. See the guide to partitioned folders.
Get Parquet Reader
Free for single files. No account needed. macOS 13 or later.
Get it on the App StoreOn Windows or Linux? Free builds are in the download section.