Sample Parquet File Download
Need a sample Parquet file to test a data pipeline, a query engine, or your pandas code? Samples Files has a set of free Apache Parquet test files that you can download right away, with no registration. It covers small flat tables, a file with every common data type and nested columns, a 300,000-row file split into row groups, legacy INT96 timestamps, and empty and corrupted files for testing error handling. All files are scanned and verified.
For other code formats, check out our selection of Code Files
Pick and Download a Free Sample Parquet file
Sample1.parquet
Employee Info, 30 rows – 6Kb
Description: 30 employees with ID, name, age, salary, department, hire date, and a list of skills. The smallest file to start with, and it already includes a list column.
Sample2.parquet
Shopping List, 100 rows – 8Kb
Description: 100 grocery products with category, price (double), stock quantity, expiration date, and supplier. Good for simple filters and aggregations.
Sample3.parquet
Students List, 1,000 rows – 26Kb
Description: 1,000 students with education level, enrollment and graduation dates, and institution. The graduation date is empty for students who haven't graduated, so it contains nulls.
Sample4-data-types.parquet
All Data Types & Nested Columns, 1,000 rows – 55Kb
Description: Customer records with int32, boolean, date, UTC timestamp, decimal(10,2), double, dictionary-encoded string, list, struct, and map columns, plus nulls in most columns. Use it to test type mapping and nested data.
Sample5-large.parquet
Large File, 300,000 rows, 6 row groups – 5MB
Description: 300,000 orders sorted by timestamp, ZSTD-compressed and split into 6 row groups of 50,000 rows. Use it for performance tests, column pruning, and filter pushdown.
Sample6-int96-timestamps.parquet
Legacy INT96 Timestamps, 100 rows – 2Kb
Description: Event data with timestamps stored as deprecated INT96, the way older Spark, Hive, and Impala wrote them. Use it to check that your reader handles legacy data lake files.
Sample7-empty.parquet
Empty File, schema only, 0 rows – 3Kb
Description: A valid Parquet file with the same 12-column schema as sample4 but no rows. Use it to test empty partitions and empty query results.
Sample8-corrupted.parquet
Corrupted File, footer missing – 28Kb
Description: Broken on purpose: the file is cut off halfway, so the footer and magic bytes are missing. Use it to test that your code reports a clear error instead of crashing.
What Is a Sample Parquet File?
Apache Parquet is an open-source, column-oriented file format for analytics. Instead of storing a table row by row like CSV, it stores each column together, compresses it, and writes the schema and min/max statistics into the file footer. Query engines can then read only the columns and row groups they need. A sample Parquet file is a ready-made Parquet dataset with realistic but fake data that you use to test code and tools.
Parquet is the default format for data lakes and tools like Apache Spark, Databricks, Snowflake, BigQuery, AWS Athena, DuckDB, and pandas. Because it is binary and typed, the bugs it causes are different from CSV: wrong type mappings, unsupported nested columns, old timestamp encodings, and files that are incomplete after a failed write. The files on this page cover each of these cases.
Common Developer Use Cases for Parquet Test Files
1. Data Pipeline Testing: Use these files as fixtures in ETL and ELT jobs that load Parquet into a warehouse or convert it to CSV or JSON. A fixed set of known inputs makes regressions easy to spot in CI.
2. Type and Schema Mapping: Load sample4-data-types.parquet into your database or dataframe library and check that decimals keep their precision, timestamps keep their time zone, and list, struct, and map columns are not flattened or dropped.
3. Query Performance: Run the same query on sample5-large.parquet with and without column selection and filters. Because the file is sorted by order_ts and split into row groups, a good reader skips most of the file for a date filter.
4. Robustness and Compatibility: Check that your reader handles legacy INT96 timestamps (sample6), returns an empty result for a file with zero rows (sample7), and fails with a clear error on a truncated file (sample8).
Which Sample Parquet File Should You Use?
| File | Variant | Best for |
|---|---|---|
| sample1.parquet – sample3.parquet | Small flat tables (30 to 1,000 rows) | First read, tutorials, quick demos in pandas, Spark, or DuckDB |
| sample4-data-types.parquet | All common types, nested columns, nulls | Type mapping, schema conversion, nested data, null handling |
| sample5-large.parquet | 300,000 rows, 6 row groups, ZSTD (5 MB) | Performance, column pruning, filter pushdown, chunked reads |
| sample6-int96-timestamps.parquet | Legacy INT96 timestamps | Compatibility with files from older Spark, Hive, and Impala |
| sample7-empty.parquet | Valid schema, 0 rows | Empty partitions, empty-result handling in pipelines |
| sample8-corrupted.parquet | Truncated, footer missing | Error handling, retries, data-quality checks on ingest |
How to Download, Inspect, and Query a Parquet File
The examples below use Python with pyarrow and pandas (pip install pyarrow pandas) and DuckDB. The output shown
is what you get with the files on this page.
Step 1: Download the file
Click Download file next to any sample above, or fetch it from the command line. Each file has a stable direct URL, so you can also download it in a CI job.
# Download a single file
curl -O https://samples-files.com/samples/code/parquet/sample1.parquet
# Download the edge-case files
curl -O https://samples-files.com/samples/code/parquet/sample4-data-types.parquet \
-O https://samples-files.com/samples/code/parquet/sample6-int96-timestamps.parquet \
-O https://samples-files.com/samples/code/parquet/sample7-empty.parquet \
-O https://samples-files.com/samples/code/parquet/sample8-corrupted.parquet Step 2: Inspect the schema and metadata
A Parquet file describes itself. You can read the schema, row groups, compression, and column statistics from the footer without loading any data.
import pyarrow.parquet as pq
# The schema is stored in the file footer, so this reads no data
print(pq.read_schema("sample4-data-types.parquet"))
# customer_id: int32 not null
# email: string not null
# is_active: bool
# signup_date: date32[day]
# last_login: timestamp[us, tz=UTC]
# balance: decimal128(10, 2)
# score: double
# country: dictionary<values=string, indices=int8, ordered=0>
# tier: string
# tags: list<element: string>
# address: struct<street: string, city: string, zip: string>
# preferences: map<string, string ('preferences')>
# Row groups, compression, and min/max statistics
md = pq.ParquetFile("sample5-large.parquet").metadata
print(md.num_rows, md.num_row_groups, md.row_group(0).column(0).compression)
# 300000 6 ZSTD
stats = md.row_group(0).column(1).statistics
print(stats.min, stats.max)
# 2025-01-01 00:01:01 2025-03-02 22:00:30 Step 3: Load it into a DataFrame
import pandas as pd # needs pyarrow installed
df = pd.read_parquet("sample1.parquet")
print(df.shape) # (30, 7)
print(df.head(3))
# EmployeeID Name Age Salary Department HireDate Skills
# 0 101 Alice 43 77101 HR 2023-08-12 [Excel, Recruitment, Data Analysis, Accounting, Python]
# 1 102 Bob 54 114508 Sales 2022-03-02 [SEO, Data Analysis]
# 2 103 Charlie 31 54247 Marketing 2017-03-02 [Python, Machine Learning, Content Marketing]
# Empty file: you still get the columns, just no rows
print(pd.read_parquet("sample7-empty.parquet").shape) # (0, 12) Step 4: Read only what you need
The main advantage of Parquet is that you don't have to read the whole file. Select columns and push filters down to the reader:
import pandas as pd
import pyarrow.parquet as pq
# Read only 3 of 7 columns, and only rows from December 2025.
# Row groups whose min/max statistics can't match are skipped.
table = pq.read_table(
"sample5-large.parquet",
columns=["order_id", "order_ts", "unit_price"],
filters=[("order_ts", ">=", pd.Timestamp("2025-12-01"))],
)
print(table.num_rows) # 25498 Or query the file with SQL in DuckDB:
-- DuckDB queries Parquet files directly, no import step
SELECT category,
count(*) AS orders,
round(sum(quantity * unit_price), 2) AS revenue
FROM 'sample5-large.parquet'
GROUP BY category
ORDER BY revenue DESC
LIMIT 3;
┌─────────────┬────────┬─────────────┐
│ category │ orders │ revenue │
│ varchar │ int64 │ double │
├─────────────┼────────┼─────────────┤
│ Toys │ 37867 │ 52354366.37 │
│ Sports │ 37418 │ 51975307.79 │
│ Electronics │ 37563 │ 51933555.02 │
└─────────────┴────────┴─────────────┘ Step 5: Test the edge cases
Check that legacy INT96 timestamps come back as real timestamps:
import pyarrow.parquet as pq
# The column is stored with the deprecated INT96 physical type
print(pq.ParquetFile("sample6-int96-timestamps.parquet").schema.column(2).physical_type)
# INT96
# pyarrow converts it back to a normal timestamp
print(pq.read_table("sample6-int96-timestamps.parquet").schema.field("event_time"))
# event_time: timestamp[ns] And confirm that a corrupted file raises an error you can catch:
import pyarrow as pa
import pyarrow.parquet as pq
try:
pq.read_table("sample8-corrupted.parquet")
except pa.ArrowInvalid as e:
print(e)
# Could not open Parquet input source 'sample8-corrupted.parquet':
# Parquet magic bytes not found in footer. Either the file is corrupted
# or this is not a parquet file.
# DuckDB reports the same problem differently:
# Invalid Input Error: No magic bytes found at end of file 'sample8-corrupted.parquet' Download Best Practices
- Don't open Parquet files in a text editor. They are binary. Saving one from an editor will corrupt it. Use pandas, DuckDB, or a Parquet viewer to look inside.
- Check the file size after downloading. A Parquet reader needs the footer at the end of the file, so an interrupted download fails with a "magic bytes not found" error, exactly like sample8-corrupted.parquet.
- Commit small files as test fixtures. Keep them in
your repository under a folder like
tests/fixtures/parquet/and mark them as binary in.gitattributes. Download larger files like sample5 in CI instead. - Make sure your reader supports the compression codec. sample1 to sample4 use Snappy and sample5 uses ZSTD. Some older or minimal Parquet libraries support only some codecs.
- Test both valid and invalid input. Pair the happy-path files with sample7-empty and sample8-corrupted so you know your empty-result and error handling actually run.
Other Sample Code files you may like
Sample CSV Files
Download sample CSV files from 10 to 10,000 rows for data import, analysis, and performance testing.
Sample JSON Files
Free sample JSON files for testing APIs, data import, and development projects with various data structures.
Sample XML Files
Free sample XML files with namespaces, XSD schemas, and malformed examples for parser and API testing.
More ideas for using a Parquet file
1. Data Warehousing: Use Parquet files to store data in a columnar format optimized for analytics. This structure significantly improves query performance in tools like Amazon Redshift or Google BigQuery.
2. Big Data Processing: Parquet is the preferred file format for distributed processing systems like Apache Hadoop and Spark. Its columnar structure allows for reading only the relevant data, speeding up processing times.
3. Efficient Storage in Data Lakes: Due to its compression and encoding capabilities, Parquet minimizes storage costs while retaining high query efficiency. This makes it ideal for storing large datasets in platforms like AWS S3 or Azure Data Lake.
4. Cross-Platform Data Sharing: Parquet's standardized schema format ensures compatibility across various analytics platforms, enabling seamless data sharing between tools and systems.
5. Machine Learning Datasets: Use Parquet files to store structured data for machine learning workflows. They provide fast, efficient access to data, facilitating model training and testing with large datasets.
Frequently Asked Questions About Sample Parquet Files
What is a sample Parquet file?
A sample Parquet file is a ready-made Apache Parquet dataset with realistic but fake data. Data engineers, analysts, and developers use it to test readers, pipelines, and query engines without exposing real production data.
Are these sample Parquet files free?
Yes. Every Parquet file on Samples Files is free to download with no registration or sign-up, and you can use them in personal and commercial projects.
How do I open a Parquet file?
Parquet is a binary format, so a text editor won't show it. Use pandas (pd.read_parquet), pyarrow, DuckDB, Apache Spark, or Polars. For a quick look without code, the DuckDB command-line tool can run SELECT * FROM 'file.parquet' LIMIT 10.
What is the difference between Parquet and CSV?
CSV stores data row by row as text with no types. Parquet stores data column by column in a compressed binary format and keeps the schema, types, and min/max statistics in the file. That makes Parquet files much smaller and lets query engines read only the columns and row groups they need.
What are row groups in a Parquet file?
A row group is a horizontal chunk of the table, stored column by column. Each row group has its own min/max statistics, so a reader can skip whole row groups that can't match a filter. sample5-large.parquet has 6 row groups of 50,000 rows each.
What are INT96 timestamps in Parquet?
INT96 is an old, deprecated way of storing timestamps that older versions of Apache Hive, Impala, and Spark wrote by default. Modern writers use INT64 with a timestamp logical type, but many existing data lakes still contain INT96 files, so readers need to support both.
If you want to know more about the Parquet format you can find more information here.