Timelaketimelake
DocsBenchmarksRoadmapSpecContribute
Apache 2.0 ·
Roadmap

DoneIn progressPlanned

Tables and storage

Done:1. Iceberg tablesDone:2. CommitsDone:3. Object-store catalogIn progress:4. Time-series table contractIn progress:5. File layout and encodingsIn progress:6. Last-value indexDone:7. One-request table state and version checksDone:8. Table format versions and upgradesDone:9. SettingsPlanned:10. Supplemental timestamps

Writing

Done:11. AppendsDone:12. Late data and dedup on readDone:13. Writes from WebAssemblyPlanned:14. Hot tier and seconds-fresh readsPlanned:15. BackfillIn progress:16. Import and migrationPlanned:17. DeletesPlanned:18. GDPR erasure

Maintenance

Done:19. CompactionIn progress:20. Maintenance runs, retention and expiry

Reading

In progress:21. Timelake readerDone:22. Block cacheDone:23. Filter pushdownDone:24. Pruning with long IN listsDone:25. Newest-first scansDone:26. Scans in series orderDone:27. Materialized rollups

SQL functions

In progress:28. Function libraryDone:29. Time buckets and gap fillingDone:30. Signal aggregatesDone:31. Downsampling with m4

Integrations

Planned:32. REST catalogPlanned:33. DuckDB extensionPlanned:34. Snowflake connectionPlanned:35. Multitenancy

Services

Planned:36. Ingestion and rulesPlanned:37. Data to eventsPlanned:38. Static read modelsPlanned:39. Computed metricsPlanned:40. Agent access with permission setsPlanned:41. Device syncPlanned:42. Edge gatewayPlanned:43. Server mode

Benchmarks

In progress:44. Benchmark harness: timebenchIn progress:45. Industrial IoT benchmarkPlanned:46. Agent benchmark

Background

ArchitectureDeployment and cost modelEmbedded engine: DataFusionLandscape and positioningLicense and open corePurpose and requirementsReleases
TimelaketimelakeThe open time-series lakehouse.
v0 · Apache 2.0 · Contribute · GitHubBuilt on Apache Arrow, Apache DataFusion, Apache Parquet, and Apache Iceberg.
DocsBenchmarksRoadmapSpecContribute

Spec 24 · Reading

Pruning with long IN lists

DoneUpdated 2026-10-18View on GitHub
Versions
0.7.0
Roadmap
Fast first queries on object storage, Millions of series
Related
4. Time-series table contract, 21. Timelake reader

Summary

column IN (…) filters of more than 20 values skip row groups and pages whose range holds none of the values, which DataFusion's pruning leaves alone. On object storage the same pruning uses a join's runtime filter, so a dashboard over a list of devices reads only their pages.

Design

  • Setting in-list-pruning (on by default; table and session). Literal lists of more than 20 values, and on object storage a join's runtime filter, prune row groups and pages by their bounds (#103).
  • Measured (2026-10-18, IIoT, compacted, local disk): a 100-tag list 54 → 31 ms, a 21-tag list 53 → 26 ms. IIoT energy on local S3 (20 ms per request): 54 → 26 ms repeated, 204 → 183 ms first run.
  • Alternative decided against (Q4): a hidden _series_id column holding the series hash, so lists of series prune on one integer column. Pruning by the key columns' own bounds did as well without changing the table (spec 4).
  • Limit: DataFusion builds a join's runtime filter list for at most 150 keys (hash_join_inlist_pushdown_max_distinct_values); past that, a dashboard over thousands of devices prunes by bounds only (#121, the milestone "Millions of series").

Open questions and issues

  • #103 Reader: prune row groups and pages for series-key sets of more than 20 values (IN-lists, join filters)
  • #121 Pruning for dashboards over thousands of devices: join runtime filters cap at 150 keys

History

  • 2026-10-18: built and measured (P8, #103)
  • 2026-10-19: moved from SPEC.md into spec 20, then into this spec when the specs were regrouped one per feature.