About
ParquetViewerNinja opens local Parquet files and lets you page through rows, filter columns, and inspect basic stats without pulling the entire dataset into RAM. The first thousand rows load immediately; more stream in as you scroll. Filtering uses DuckDB under the hood, so range, wildcard, and multi-value (pipe-separated) expressions run against the file directly rather than an in-memory copy.
Column stats — row count, null count, distinct values, min/max/avg — are fetched in the background so the table stays usable while they compute. Numeric columns get a small decimal filter dialog for excluding nulls, zeros, and near-zero values. The window size is fixed at 1700×900, which fits comfortably on a 1080p display.
What it does
- Stream rows on scroll — loads 1 000 rows initially, fetches 2 000 more as you reach the bottom
- Filter any column with range (1..100), wildcard (*txt*), exact, comparison, or OR (a|b|c) expressions
- Compute per-column stats (count, nulls, unique, min/max/avg) in a background thread
- Filter numeric columns by null, zero, or near-zero (|v| ≤ 0.001) via toggle checkboxes
- System-tray presence via pystray so the window can be minimised out of the taskbar
Requirements
Windows 10+, 64-bit. No Python installation required for the .exe — everything is bundled via PyInstaller.
Verify the download
Before running the executable, compare its SHA-256 hash to the one below.
e6f1efdb974d9b49dc87a6e45f39d8cdb476c0c391d0ddba3685cbf96cfed892
In PowerShell, from the folder where you saved the file:
Get-FileHash .\parquetviewerninja-v6.0.zip -Algorithm SHA256
If the output matches the hash above, the file is intact. If not, delete it and re-download.
Build it yourself
The source .zip contains everything needed to rebuild the executable from scratch:
parquetviewerninja.py— the full source.requirements.txt— pinned Python dependencies.build.bat— installs deps into a local venv and runs PyInstaller.README.md— build and usage notes.
With Python 3.12 installed, unzip and run:
build.bat Known limitations
Only reads local single-file Parquet; partitioned datasets and remote paths are not supported.