Example Data #
Public Parquet files hosted at data.pqtool.dev for trying out pq. No
download needed - pq reads remote files lazily, fetching only the bytes it
needs.
Available files #
| File | Rows | Size | Description |
|---|---|---|---|
| orders-10k.parquet | 10,000 | 2 MB | Tiny - instant for any command |
| orders-100k.parquet | 100,000 | 19 MB | Small - good for SQL and jq tutorials |
| orders-100m.parquet | 100,000,000 | 16 GB | Large - demonstrates lazy loading and range requests |
All three files share the same schema: a synthetic e-commerce orders dataset with 30 columns covering a wide range of Parquet types.
Quick start #
# Inspect the schema (fetches only metadata, ~1 KB)
pq schema "https://data.pqtool.dev/orders-10k.parquet"
# Preview rows
pq head "https://data.pqtool.dev/orders-10k.parquet"
# SQL query
pq sql "SELECT status, count(*) n
FROM 'https://data.pqtool.dev/orders-100k.parquet'
GROUP BY status ORDER BY n DESC"
# Count 100 million rows (reads only the footer, ~600 bytes)
pq count "https://data.pqtool.dev/orders-100m.parquet"
Schema #
Schema (30 columns):
├── order_id: int64 (nullable)
├── user_id: int32 (nullable)
├── order_date: date (nullable)
├── created_at: timestamp(us) (nullable)
├── updated_at: timestamp(us) (nullable)
├── status: string (nullable)
├── is_priority: boolean (nullable)
├── is_returning_customer: boolean (nullable)
├── subtotal: float64 (nullable)
├── tax_amount: float32 (nullable)
├── discount_pct: float64 (nullable)
├── total_amount: float64 (nullable)
├── currency: string (nullable)
├── item_count: int16 (nullable)
├── customer_name: string (nullable)
├── email: string (nullable)
├── age: int8 (nullable)
├── loyalty_points: uint32 (nullable)
├── weight_kg: decimal(10,3) (nullable)
├── session_token: fixed_binary(16) (nullable)
├── shipping_address: struct (nullable)
│ ├── street: string (nullable)
│ ├── city: string (nullable)
│ ├── state: string (nullable)
│ ├── zip: string (nullable)
│ └── country: string (nullable)
├── billing_address: struct (nullable)
│ ├── street: string (nullable)
│ ├── city: string (nullable)
│ ├── state: string (nullable)
│ ├── zip: string (nullable)
│ └── country: string (nullable)
├── tags: list<string> (nullable)
├── ratings: list<int8> (nullable)
├── line_items: list<struct> (nullable)
│ ├── product_id: int32 (nullable)
│ ├── product_name: string (nullable)
│ ├── quantity: int16 (nullable)
│ ├── unit_price: float64 (nullable)
│ └── category: string (nullable)
├── payment: struct (nullable)
│ ├── method: string (nullable)
│ ├── card_last_four: string (nullable)
│ └── processor_response: struct (nullable)
│ ├── code: string (nullable)
│ ├── message: string (nullable)
│ └── risk_score: float32 (nullable)
├── metadata: map (nullable)
│ ├── key: string
│ └── value: string (nullable)
├── notes: string (nullable)
├── referral_source: string (nullable)
└── session_duration_ms: int64 (nullable)
Verified against pq schema orders-10k.parquet -f table (generate_test_parquet.py
marks every top-level and nested field nullable, regardless of its actual null
rate — the Arrow schema itself doesn't encode "5%-80%", only the data does).
The dataset includes primitives (int, float, bool, string), temporal types
(date, timestamp), nested structs (including 3-level nesting via
payment.processor_response), lists of scalars and structs, a map, a
decimal, fixed-size binary, and columns with varying null rates (5%-80%) —
the null rate varies per column, but the schema marks every column
nullable.
Download locally #
If you want a local copy:
curl -Lo orders-10k.parquet https://data.pqtool.dev/orders-10k.parquet
curl -Lo orders-100k.parquet https://data.pqtool.dev/orders-100k.parquet
The 16 GB file is best used remotely via pq's lazy loading - there's no need to download it.