Skip to main content

v1.0.0-beta.1

Β· 17 min read

Release date: November 11, 2025

🚨 Breaking changes​

  • refactor(pipeline)!: change dispatch table name format by @paomian in #6901
  • feat!: improve greptime_identity pipeline behavior by @waynexia in #6932
  • refactor!: add enable_read_cache config to support disable read cache explicitly by @zyy17 in #6834
  • refactor!: remove pb_value to json conversion, keep json output consistent by @sunng87 in #7063
  • refactor!: unify the API of getting total cpu and memory by @zyy17 in #7049
  • refactor!: add a opentelemetry_traces_operations table to aggregate (service_name, span_name, span_kind) to improve query performance by @zyy17 in #7144
  • feat(metric)!: enable sparse primary key encoding by default by @WenyXu in #7195

πŸ‘ Highlights​

Dashboard v0.11.7 Released​

  • Metrics UI optimization: separated table and chart tabs, independent instant/range queries, support for time picker and multi-value display.
  • Timezone optimization: support for timezone validation and local storage persistence.
  • Flow management: UI for flow task CRUD operations.

Bulk Memtable​

For scenarios with high cardinality primary keys, this release introduces experimental Bulk Memtable and a new data organization format (flat format). Both must be used together. Bulk Memtable offers lower memory usage when dealing with high cardinality primary keys. When primary key cardinality exceeds two million, memory usage can be reduced by more than 75%. Currently, Bulk Memtable performs better with larger write batch sizes, and we recommend setting batch sizes to 1024 rows or more when using Bulk Memtable. Additionally, the new data organization format provides better query performance in high cardinality scenarios compared to the original format.

Users can enable the new data format and Bulk Memtable by specifying sst_format as flat when creating tables.

CREATE TABLE flat_format_table(
request_id STRING,
content STRING,
greptime_timestamp TIMESTAMP TIME INDEX,
PRIMARY KEY (request_id))
WITH ('sst_format' = 'flat');

Additionally, for tables using the old format, you can switch to the flat format and Bulk Memtable using an ALTER statement.

ALTER TABLE old_format_table SET 'sst_format' = 'flat';

Tables using the flat format cannot be converted back to the old format. We will gradually switch the default format to the new format in future releases.

Independent Index File Caching​

This release implements independent local caching for index files on object storage, allowing index files to be cached in local disk cache as much as possible, reducing the probability of accessing object storage during index queries. By default, the database allocates 20% of disk cache space to index files. Users can adjust this ratio by setting the index_cache_percent parameter.

In previous versions, when users increased the local disk cache size, only newly generated data files could enter the local write cache, providing limited improvement for querying historical data. In this version, the database loads index files from object storage to local storage in the background after startup, reducing the time required for historical data queries.

Read-Write Permission Control Mode​

This release introduces permission mode support for the static user provider, implementing read-write access control with support for read-only, write-only, and read-write permissions. This enhancement enables administrators to create users with specific access levels, improving security and data governance.

The static user provider now accepts the format username:permission_mode=password, where the optional permission_mode can be:

  • rw (read-write): Full access to read and write operations
  • ro (read-only): Restricted to read operations only
  • wo (write-only): Restricted to write operations only

Examples:

# Read-write user (default, backward compatible)
greptime_user=greptime_pwd
# Or explicitly specified
greptime_user:rw=greptime_pwd

# Read-only user
greptime_user:ro=greptime_pwd

# Write-only user
greptime_user:wo=greptime_pwd

This feature is fully backward compatible with the old format - users without an explicitly specified permission mode default to read-write access (rw).

TQL Supports Value Aliasing​

TQL now supports AS aliases for clearer column names and easier SQL integration.

TQL EVAL (0, 30, '10s') http_requests_total AS requests;

New objbench Subcommand (Datanode)​

This release adds the greptime datanode objbench subcommand for conducting read/write performance benchmarks on specified SST files in object storage. This tool can be used to analyze storage layer performance, troubleshoot slow queries or I/O latency issues, and supports generating flame graphs for deeper performance diagnostics. Main Features

  • Perform read/write performance tests on individual SST files
  • Support detailed output (-v/--verbose)
  • Support generating SVG flame graphs (--pprof-file)
  • Can load datanode configuration files (--config)
# Basic test
greptime datanode objbench --config datanode.toml --source <path>.parquet

# Generate flame graph
greptime datanode objbench --config datanode.toml --source <path>.parquet --pprof-file flamegraph.svg

πŸš€ Features​

πŸ› Bug Fixes​

  • fix: staging mode with proper region edit operations by @waynexia in #6962
  • fix: print the output message of the error in admin fn macro by @evenyag in #6994
  • fix: make EXPIRE (keyword) parsing case-insensitive, when creating flow by @Shyamnatesan in #6997
  • fix: promql range function has incorrect timestamps by @waynexia in #7006
  • fix: incorrect timestamp resolution in information_schema.partitions table by @waynexia in #7004
  • fix: match promql column reference in case sensitive way by @waynexia in #7013
  • fix: group by expr not as column in step aggr by @discord9 in #7008
  • fix(cli): fix FS object store handling of absolute paths by @WenyXu in #7018
  • fix: skip placeholder when partition columns by @discord9 in #7020
  • fix: not step when aggr have order by/filter by @discord9 in #7015
  • fix: step aggr merge phase not order nor filter by @discord9 in #6998
  • fix: fix test_resolve_relative_path_relative on windows by @paomian in #7039
  • fix: fix panic and limit concurrency in flat format by @evenyag in #7035
  • fix: use instance labels to fetch greptime_memory_limit_in_bytes and greptime_cpu_limit_in_millicores metrics by @zyy17 in #7043
  • fix: various typos reported by CI by @sunng87 in #7047
  • fix: build_grpc_server visibility by @sunng87 in #7054
  • fix: only skips auto convert when encoding is sparse by @evenyag in #7056
  • fix: show proper error msg, when executing non-admin functions as admin functions by @Shyamnatesan in #7061
  • fix: support dictionary in regex match by @evenyag in #7055
  • fix: correct impl Clear for &[u8] by @v0y4g3r in #7081
  • fix: part cols not in projection by @discord9 in #7090
  • fix: fix build warnings by @WenyXu in #7099
  • fix: list inner type for json and valueref, refactor type to ref for struct/list by @sunng87 in #7113
  • fix: prom ql logical plan use column index not name by @discord9 in #7109
  • fix: unit test about trigger parser by @fengys1996 in #7132
  • fix: fix index and tag filtering for flat format by @evenyag in #7121
  • fix: correct test_index_build_type_compact by @SNC123 in #7137
  • fix: count_state use stat to eval&predicate w/out region by @discord9 in #7116
  • fix: add delays in reconcile tests for async cache invalidation by @WenyXu in #7147
  • fix: cache estimate methods by @waynexia in #7157
  • fix: missing flamegraph feature in pprof dependency by @WenyXu in #7158
  • fix: memtable value push result was ignored by @MichaelScofield in #7136
  • fix: initializer container not work by @daviderli614 in #7152
  • fix: avoid filtering rows with delete op by fields under merge mode by @evenyag in #7154
  • fix: potential failure in tests by @killme2008 in #7167
  • fix: stabilize test results by @shuiyisong in #7182
  • fix(mito): append mode in flat format not working by @v0y4g3r in #7186
  • fix(mito): avoid shortcut in picking multi window files by @v0y4g3r in #7174
  • fix: add serde defaults for MetasrvNodeInfo by @WenyXu in #7204
  • fix: allow case-insensitive timezone settings by @sunng87 in #7207
  • fix: correct leader state reset and region migration locking consistency by @WenyXu in #7199
  • fix(mito): allow region edit in writable state by @v0y4g3r in #7201
  • fix: deregister failure detectors on rollback and improve timeout handling by @WenyXu in #7212

🚜 Refactor​

  • refactor: use DataFusion's Signature directly in UDF by @MichaelScofield in #6908
  • refactor: use DataFusion's return_type in our function trait directly by @MichaelScofield in #6935
  • refactor: refactor PeerLookupService and simplify Selector implementations by @WenyXu in #6939
  • refactor: rewrite h3 functions to DataFusion style by @MichaelScofield in #6942
  • refactor: region follower management with unified interface by @WenyXu in #6986
  • refactor: put FileId to store-api by @discord9 in #6988
  • refactor: rewrite some UDFs to DataFusion style (part 2) by @MichaelScofield in #6967
  • refactor: rewrite some UDFs to DataFusion style (part 3) by @MichaelScofield in #6990
  • refactor(cli): refactor object storage config by @WenyXu in #7009
  • refactor: rewrite some UDFs to DataFusion style (part 4) by @MichaelScofield in #7011
  • refactor: cleanup datafusion-pg-catalog dependencies by @sunng87 in #7025
  • refactor: rewrite some UDFs to DataFusion style (final part) by @MichaelScofield in #7023
  • refactor: make Function trait a simple shim of DataFusion UDF by @MichaelScofield in #7036
  • refactor: add cgroup metrics collector by @zyy17 in #7038
  • refactor: remove duplicated valueref to json by @sunng87 in #7062
  • refactor: restructure sqlness to support multiple envs and extract common utils by @WenyXu in #7066
  • refactor: remove unused grpc-expr module and pb conversions by @sunng87 in #7085
  • refactor: add peer_hostname field in information_schema.cluster_info table by @zyy17 in #7050
  • refactor: update valueref coerce function name based on its semantics by @sunng87 in #7098
  • refactor: convert to mysql values directly from arrow by @MichaelScofield in #7096
  • refactor: convert to postgres values directly from arrow by @MichaelScofield in #7131
  • refactor: refactor instruction handler and adds support for batch region downgrade operations by @WenyXu in #7130
  • refactor: use generic for heartbeat instruction handler by @discord9 in #7149
  • refactor: add test feature gate to numbers table by @shuiyisong in #7148
  • refactor: convert to prometheus values directly from arrow by @MichaelScofield in #7153
  • refactor: add support for batch region upgrade operations part1 by @WenyXu in #7155
  • refactor: add support for batch region upgrade operations part2 by @WenyXu in #7160
  • refactor: convert to influxdb values directly from arrow by @MichaelScofield in #7163

πŸ“š Documentation​

πŸ§ͺ Testing​

βš™οΈ Miscellaneous Tasks​

Build​

New Contributors​

All Contributors​

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

@MichaelScofield, @SNC123, @Shyamnatesan, @Standing-Man, @WaterWhisperer, @WenyXu, @ZonaHex, @aaraujo, @cscnk52, @daviderli614, @discord9, @evenyag, @fengjiachun, @fengys1996, @github-actions[bot], @killme2008, @linyihai, @paomian, @shuiyisong, @sunng87, @v0y4g3r, @waynexia, @zhongzc, @zyy17