Overview
QuestDB automatically partitions tables based on their designated timestamp column. Partitions are directories containing column files for a specific time range, enabling efficient time-range queries and data lifecycle management.Partition Intervals
ThePartitionBy class defines all supported partitioning strategies:
HOUR- Hourly partitionsDAY- Daily partitions (most common)WEEK- Weekly partitionsMONTH- Monthly partitionsYEAR- Yearly partitionsNONE- No partitioning (single directory)
Creating Partitioned Tables
Daily Partitioning
Hourly Partitioning
For very high-frequency data:Monthly Partitioning
For lower-frequency or archival data:No Partitioning
For small tables or tables without time-series characteristics:Partition Directory Naming
Partition directories use formatted timestamps:PartitionBy.setSinkForPartition() (source:core/src/main/java/io/questdb/cairo/PartitionBy.java:99-105).
| Interval | Format | Example |
|---|---|---|
| HOUR | YYYY-MM-DDTHH | 2024-03-15T14 |
| DAY | YYYY-MM-DD | 2024-03-15 |
| WEEK | YYYY-Www | 2024-W11 |
| MONTH | YYYY-MM | 2024-03 |
| YEAR | YYYY | 2024 |
| NONE | default | default |
Partition Operations
Querying Specific Partitions
Filter by timestamp to limit partition access:Listing Partitions
Dropping Partitions
Delete old data efficiently:Attaching Partitions
Add external partition directories:Detaching Partitions
Remove partition from table without deleting:Choosing Partition Interval
Factors to Consider
- Data volume: More data → finer granularity
- Query patterns: Match partition size to typical query ranges
- Write frequency: Balance partition overhead with write efficiency
- Data retention: Easier to drop entire partitions
Guidelines
| Data Rate | Partition By | Rationale |
|---|---|---|
| < 100K rows/day | DAY or MONTH | Avoid excessive small partitions |
| 100K - 10M rows/day | DAY | Good balance |
| 10M - 100M rows/day | DAY or HOUR | High volume benefits from finer granularity |
| > 100M rows/day | HOUR | Prevents partition sizes from growing too large |
Query Pattern Considerations
Dashboard queries (recent data):Partition Pruning
The query engine automatically skips partitions that cannot contain matching rows.Example: Time Range Filter
- Parse WHERE clause to extract timestamp bounds
- Determine relevant partitions:
2024-03-15,2024-03-16,2024-03-17 - Skip all other partitions entirely
- Open and scan only 3 partition directories
Example: Point Query
- Calculate partition:
2024-03-15(DAY partition) - Open single partition
- Binary search within partition using timestamp index
Partition Formats
QuestDB supports multiple storage formats per partition.Native Format
Default format with individual column files:Parquet Format
Compressed, single-file format for archival:Converting to Parquet
Mixed Format Tables
- Recent partitions in native format (read/write)
- Old partitions in Parquet format (read-only, compressed)
Time-To-Live (TTL)
Automatic partition deletion based on age.Setting TTL
TTL Validation
TTL Constraints
- TTL must be a multiple of partition size
- DAY partitions: TTL in days (e.g.,
30d,90d) - HOUR partitions: TTL in hours (e.g.,
72h,168h) - MONTH partitions: TTL in months (e.g.,
12M,24M)
Performance Implications
Partition Count
Too few partitions:- Large partition files slow down queries
- Less parallelization opportunity
- Harder to manage data lifecycle
- Overhead opening many directories
- More file descriptors
- Slower metadata operations
Parallel Query Execution
QuestDB processes partitions in parallel:- Each thread processes ~4 partitions
- Results are merged after parallel execution
Write Isolation
Only the current partition is writable:- Concurrent reads of historical data
- Safe writes to current partition
- No locking overhead for old partitions
Best Practices
1. Match Partition Size to Query Patterns
2. Use TTL for Automatic Cleanup
3. Convert Old Partitions to Parquet
- 3-10x compression
- S3-compatible format
- Reduced local storage costs
4. Monitor Partition Sizes
- 1M-100M rows per partition (DAY)
- 100K-10M rows per partition (HOUR)
5. Align Partition Boundaries with Business Logic
See Also
- Storage Model - Column-oriented storage architecture
- WAL Architecture - Write-Ahead Log for concurrent writes
- Time-Series Database - Core concepts