Skip to main content

v0.17.0

Β· 10 min read

Release date: September 03, 2025

🚨 Breaking Changes​

  • Ordered-set aggregate functions
    • Now require a WITHIN GROUP (ORDER BY …) clause (e.g., old: approx_percentile_cont(latency, 0.95), new: approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY latency)).
  • MySQL protocol
    • Incorrect comment styling is no longer allowed; comments must start with -- instead of ---.

πŸ‘ Highlights​

  • Flow Support TQL(PromQL):
    • TQL (Time Query Language) now integrates seamlessly with Flow, enabling advanced time-series computations such as rate calculations, moving averages, and other complex time-window operations. For more details, see Using TQL with Flow for Advanced Time-Series Analysis.
  • Performance:
    • Optimize sparse encoder with a 235% performance boost (#6809)
    • Introduced region pruning (#6729, #6752).
  • Procedure:
    • Introduced table reconciliation procedures to automatically detect and repair metadata inconsistencies between Metasrv and Datanode. For more information, refer to the table reconciliation documentation.
  • Remote WAL:

πŸš€ Features​

*feat: add metrics for reconciliation procedures by @WenyXu in #6652

  • feat(metric-engine): add metadata region cache by @WenyXu in #6657
  • feat: update pgwire to 0.32 by @sunng87 in #6674
  • feat: Implements an iterator to merge RecordBatches by @evenyag in #6666
  • feat: able to set read preference to flownode by @MichaelScofield in #6696
  • feat: new HTTP API for formatting SQL by @waynexia in #6691
  • feat: Implements last row dedup strategy for flat format by @evenyag in #6695
  • feat: mito region staging state by @waynexia in #6664
  • feat: Projection mapper for flat schema by @evenyag in #6679
  • feat: add all partition column to logical table automatically by @waynexia in #6711
  • feat: add integration tests for table reconciliation procedures part1 by @WenyXu in #6705
  • feat(log-query): try infer and cast type for literal value by @waynexia in #6712
  • feat: introduce PeriodicTopicStatsReporter by @WenyXu in #6730
  • feat(metasrv): implement topic statistics collection by @WenyXu in #6732
  • feat: Store partition expr in RegionMetadata by @zhongzc in #6699
  • feat: improve slow queries options deserialization by @killme2008 in #6734
  • feat: predicate extractor (region prune part 1) by @waynexia in #6729
  • feat: persist manifest, SST and index files to staging dir by @waynexia in #6726
  • feat: mysql add prepared_stmt_cache_capacity by @sunheyi6 in #6639
  • feat: Implements last-non-null dedup strategy for flat format by @evenyag in #6709
  • feat: flownode grpc client to frontend tls option by @discord9 in #6750
  • feat: add RateMeter for tracking memtable write throughput by @WenyXu in #6744
  • feat: Implements async FlatMergeReader and FlatDedupReader by @evenyag in #6761
  • feat: update opentelemetry family by @sunng87 in #6762
  • feat: derive macro ToRow by @WenyXu in #6768
  • feat: disable month in trigger interval expr by @fengys1996 in #6774
  • feat: Implements FlatCompatBatch to adapt schema in flat format by @evenyag in #6771
  • feat: region prune part 2 by @waynexia in #6752
  • feat: simplify more regex patterns in promql by @waynexia in #6747
  • feat: add IntoRow and Schema derive macros by @WenyXu in #6778
  • feat: introduce PersistStatsHandler by @WenyXu in #6777
  • feat: optimize CreateFlowData with lightweight FlowQueryContext by @aaraujo in #6780
  • feat: support for custom headers in otel exporter by @sunng87 in #6773
  • feat: frontend internal grpc port by @discord9 in #6784
  • feat: provide plan info when flow exec by @discord9 in #6783
  • feat: update dashboard to v0.11.0 by @ZonaHex in #6794
  • feat(mito): list SSTs from manifest and storage by @zhongzc in #6766
  • feat: bump opendal to v0.54 by @killme2008 in #6792
  • feat: add limit to label value api by @sunng87 in #6795
  • feat: add cli option for internal grpc by @sunng87 in #6806
  • feat: add FlatConvertFormat to convert record batches in old format to the flat format by @evenyag in #6786
  • feat: name label regex matcher in label values api by @sunng87 in #6799
  • feat: only show prometheus logical tables for name values query by @sunng87 in #6814
  • feat: update dashboard to v0.11.1 by @ZonaHex in #6824
  • feat: resolve unused dependencies with cargo-udeps (#6578) by @Arshdeep54 in #6619
  • feat: add support for TWCS time window hints in insert operations by @WenyXu in #6823
  • feat: functions and structs to scan flat format file and mem ranges by @evenyag in #6817
  • feat: add replay checkpoint to reduce overhead for remote WAL by @WenyXu in #6816
  • feat(metasrv): support tls for etcd client by @codephage2020 in #6818
  • feat(flow): add eval interval option by @discord9 in #6623
  • feat: rename region_statistics to region_statistics_history by @WenyXu in #6837
  • feat: add event ts to region manifest by @discord9 in #6751
  • feat: add optional schema for Postgres metadata tables by @zqr10159 in #6764
  • feat: update dashboard to v0.11.2 by @ZonaHex in #6843
  • feat: flow prom ql auto sink table is also promql-able by @discord9 in #6852
  • feat: make etcd store max codec size configurable by @fengjiachun in #6859
  • feat: Support more key types for the DictionaryVector by @evenyag in #6855
  • feat: update rate limiter to use semaphore that will block without re… by @sunng87 in #6853
  • feat: update dashboard to v0.11.3 by @ZonaHex in #6864
  • feat: add schema and recordbatch builder for sst entry by @zhongzc in #6841
  • feat: Update parquet writer and indexer to support the flat format by @evenyag in #6866
  • feat: flow full aggr only trigger on new data by @discord9 in #6880

πŸ› Bug Fixes​

  • fix: correctly set extension range source index by @MichaelScofield in #6692
  • fix: TQL CTE parser take raw query string by @waynexia in #6671
  • fix: metrics without physical partition columns query push down by @discord9 in #6694
  • fix: unit test about trigger labels parse by @fengys1996 in #6716
  • fix: http and tql should return the same value for unknown by @yihong0618 in #6718
  • fix: update pgwire to fix windows timeout issue by @sunng87 in #6710
  • fix: correct offset's symbol by @waynexia in #6728
  • fix: label_join should work with unknown by @yihong0618 in #6714
  • fix: two label_replace different from promql by @yihong0618 in #6720
  • fix: support unknown for timestamp function by @yihong0618 in #6708
  • fix: truncate manifest action compat by @discord9 in #6742
  • fix: refine shadowrs dependency, remove libgit2, libz and potentially libssl by @sunng87 in #6748
  • fix: partition tree's dict size metrics mismatch by @waynexia in #6746
  • fix: time() function should the same as behavior prometheus by @yihong0618 in #6704
  • fix: time unit mismatch in lookup_frontends function by @WenyXu in #6798
  • fix: plan disorder from upgrading datafusion by @waynexia in #6787
  • fix: follow promql rule for hanndling label of aggr by @waynexia in #6788
  • fix: correct heartbeat stream handling logic by @WenyXu in #6821
  • fix: prevent stale physical table route during procedure retries by @WenyXu in #6825
  • fix: use actual buf size as cache page value size by @evenyag in #6829
  • fix: gRPC auth by @shuiyisong in #6827
  • fix: correct config doc by @WenyXu in #6836
  • fix: no need to early lookup DNS for kafka broker by @MichaelScofield in #6845
  • fix: use configured kv_client in etcd multi-transaction operations by @WenyXu in #6871
  • fix: fix incorrect timestamp precision in information_schema.tables by @WenyXu in #6872
  • fix(flow): promql auto create table by @discord9 in #6867
  • fix: ignore reserved column IDs and prevent panic on chunk_size is zero by @WenyXu in #6882
  • fix: prune intermediate dirs on index finish and region pruge by @zhongzc in #6878
  • fix: initialize remote WAL regions with correct flushed entry IDs by @WenyXu in #6856
  • fix: move prune_region_dir to region drop by @zhongzc in #6891

🚜 Refactor​

  • refactor: refine error status code mappings by @WenyXu in #6678
  • refactor: unify the event recorder by @zyy17 in #6689
  • refactor: use DummyCatalog to construct query engine for datanode by @zhongzc in #6723
  • refactor: split node manager trait by @zhongzc in #6743
  • refactor: simplify WAL pruning procedure and introduce region flush trigger by @WenyXu in #6741
  • refactor: enhanced trigger interval by @fengys1996 in #6740
  • refactor: change plugin option type from &[PluginOptions] to Option<&PluginOptions> for understandability by @zyy17 in #6763
  • refactor: refactor admin functions with async udf by @killme2008 in #6770
  • refactor: use DataFusion's UDAF implementation directly by @MichaelScofield in #6776
  • refactor: simplify WAL Pruning procedure part2 by @WenyXu in #6782
  • refactor(meta): refactor admin service to use modern axum handlers by @WenyXu in #6833
  • refactor: add stop methods for LocalFilePurger and CompactionRegion by @zyy17 in #6848
  • refactor: query config options by @killme2008 in #6781

πŸ“š Documentation​

⚑ Performance​

πŸ§ͺ Testing​

βš™οΈ Miscellaneous Tasks​

New Contributors​

All Contributors​

We would like to thank the following contributors from the GreptimeDB community:

@Arshdeep54, @MichaelScofield, @SNC123, @WaterWhisperer, @WenyXu, @ZonaHex, @aaraujo, @codephage2020, @daviderli614, @discord9, @evenyag, @fengjiachun, @fengys1996, @github-actions[bot], @killme2008, @paomian, @shuiyisong, @sunheyi6, @sunng87, @v0y4g3r, @waynexia, @yihong0618, @zhongzc, @zqr10159, @zyy17