Skip to main content

v1.2.0

Β· 20 min read

Release date: September 8, 2026

GreptimeDB v1.2.0 adds new structural stored JSON data type ("JSON2") and query capabilities, Prometheus Remote Write v2 ingestion, Flow runtime observability, and dashboard updates, alongside query and ingestion improvements.

πŸ‘ Highlights​

New structural stored JSON data type and dot-style SQL access. JSON data can be stored as structs, instead of as a whole blob (JSONB). Featured with SQL paths and functions, list indexing, empty and null handling, and table-aware pipelines (#8909, #8928, #8940, #8979, #9007, #9010, #9013, #9027, and #8964). For example, JSON2 fields can be accessed with dot paths or json_get:

CREATE TABLE application_logs (
ts TIMESTAMP TIME INDEX,
attrs JSON2
) WITH (
'append_mode' = 'true'
);
INSERT INTO application_logs VALUES
(1, '{"http":{"status":200,"path":"/api/orders"}}');
SELECT
attrs.http.status::BIGINT AS status,
json_get(attrs, 'http.path')::STRING AS path
FROM application_logs;

Prometheus Remote Write v2 and experimental native histograms. GreptimeDB can ingest Prometheus Remote Write v2 requests and query native histograms through PromQL (#8361, #8382, #8654, #8664, and #8693). Native-histogram ingestion is experimental and disabled by default. To enable it in GreptimeDB:

[http]
experimental_enable_prometheus_native_histogram = true

Configure Prometheus to use protobuf_message: io.prometheus.write.v2.Request:

remote_write:
- url: http://greptimedb:4000/v1/prometheus/write
protobuf_message: io.prometheus.write.v2.Request

More efficient series queries. Dictionary-encoded series keys, correct regex filtering on dictionary-encoded columns, and RangeSelect projection pruning improve query efficiency (#8541, #8688, and #8570).

Splunk HEC ingestion. Send structured events or raw logs directly to /v1/splunk/services/collector/event or /v1/splunk/services/collector/raw using Splunk HEC-compatible clients (#8321 and #8491).

Flow runtime status. SHOW FLOW STATUS and information_schema.flow_statistics expose Flow runtime statistics (#8392); distributed Flow reports start_time and uptime_seconds as NULL in this release. #8729 fixes Flow statistics aggregation and quoting.

SHOW FLOW STATUS LIKE 'my%';
SELECT * FROM information_schema.flow_statistics;

Dashboard​

The bundled GreptimeDB dashboard is updated from v0.12.2 (bundled with v1.1.0) to v0.13.13. The update includes:

Dashboard integration updates are included in #8687 and #8898.

Breaking changes​

  • Local SQL filesystem access is sandboxed. In standalone deployments, local COPY and external-table paths are limited to the copy root; in distributed deployments, those local paths are disabled. Before upgrading, follow the local SQL file access migration guide to move data, set a dedicated copy root, or move the workflow to object storage (#8708) by @fengjiachun.
  • holt_winters was removed. Use double_exponential_smoothing instead (#8457) by @shuiyisong.
  • sparse_primary_key_encoding was removed. Metric-engine data regions default to sparse primary-key encoding. Existing configurations still load, but this option is ignored. Remove it when updating configuration (#8470) by @sunng87.
  • Out-of-range pipeline integer conversions no longer silently wrap. Integer narrowing now checks the target range and follows the configured on_failure behavior when a value does not fit (#8589) by @discord9.
  • Soft-drop and recovery are Enterprise Edition features. In beta1, these operations were available in OSS; from beta2 onward, an OSS metasrv rejects gc.experimental_soft_drop.enable = true. Before upgrading from beta1, recover any soft-dropped tables you need. OSS cannot recover or purge tables already soft-dropped in beta1 and does not clean up their expired tombstones; Enterprise Edition is required to continue that lifecycle (#8747) by @v0y4g3r.
  • Native histogram persisted fields changed signedness. Span-length list elements changed from UInt32 to Int32; integer count fields changed from UInt64 to Int64, with count_u64/zero_count_u64 renamed to count_i64/zero_count_i64. Native-histogram Struct data written by earlier betas with the old schema may be unreadable. This caveat concerns the experimental beta feature, not ordinary v1.1 metric tables. There is no migration, downgrade, or mixed-version compatibility layer; plan migration or reingestion before upgrading (#8824) by @sunng87.
  • Legacy JSON2 tables require upgrade testing. Existing non-append tables using the legacy greptime.json type can fail during flush or compaction after upgrade. This known limitation is not fixed in v1.2.0. For affected tables, defer the upgrade, or logically export data from a compatible old-version environment and import it into a newly created v1.2.0 table. Do not copy old table directories or metadata. Retain a backup; validate completeness and perform an actual flush and compaction on the new table before cutover. Test the migration with representative data. Setting append_mode alone is not a guaranteed remedy.

The changelog below covers changes since v1.1.0, excluding those already shipped in v1.1.1–v1.1.4. Earlier soft-drop work is listed for attribution but is Enterprise-only in this release.

πŸš€ Features​

  • feat(cli): add export-v2 chunk parallelism by @fengjiachun in #8292
  • feat: pass Kafka pruned entry id when creating regions by @WenyXu in #8282
  • feat(cli): add export-v2 progress reporting by @fengjiachun in #8294
  • feat(cli): add import-v2 task parallelism by @fengjiachun in #8300
  • feat: update dashboard to v0.13.1 by @ZonaHex in #8306
  • feat: add repartition column hint by @WenyXu in #8291
  • feat(cli): allow overriding import-v2 state path by @fengjiachun in #8302
  • feat: decouple error retryability from status codes by @WenyXu in #8301
  • feat: expose region read load metrics by @v0y4g3r in #8316
  • feat: add flow batching metrics to grafana dashboard by @evenyag in #8353
  • feat: add remote dynamic filter metrics by @discord9 in #8309
  • feat: Add support for splunk HEC endpoints by @agrawalx in #8321
  • feat: prw_v2 initial commit with sample ingestion by @shuiyisong in #8361
  • feat: accept x-greptime-pipeline-name header on /events/logs by @BootstrapperSBL in #8371
  • feat(json2): type hint by @fengys1996 in #8247
  • feat: support table-level auto_flush_interval by @raphaelroshan in #8357
  • feat: support structured instruction reply errors by @WenyXu in #8335
  • feat(json2): reject non-object JSON values on write by @fengys1996 in #8381
  • feat: stream explain analyze metrics over http by @discord9 in #8380
  • feat: report region query stats in heartbeat by @WenyXu in #8401
  • feat: add query regression perf harness by @discord9 in #8406
  • feat: add soft-drop table recovery procedures by @v0y4g3r in #8061 (Enterprise-only in v1.2.0; see upgrade notes.)
  • feat: persist Prometheus remote write v2 native histograms by @shuiyisong in #8382
  • feat(query): add runtime provider interface by @discord9 in #8386
  • feat: support ALTER TABLE SET auto_flush_interval by @srivtx in #8403
  • feat: add Prom remote-write query regression scenario by @discord9 in #8413
  • feat(json2): validate append mode for tables with JSON2 columns by @fengys1996 in #8434
  • feat(json2): encode json2 variant payloads as jsonb by @fengys1996 in #8435
  • feat: add fuzz CI failure investigation skill by @WenyXu in #8456
  • feat: add strict CSV header validation by @QuakeWang in #8426
  • feat: more region lifecycle hooks by @sunng87 in #8467
  • feat: prepare soft-drop WAL retirement by @v0y4g3r in #8475 (Enterprise-only in v1.2.0; see upgrade notes.)
  • feat: clean up soft-dropped regions offline by @v0y4g3r in #8458 (Enterprise-only in v1.2.0; see upgrade notes.)
  • feat: enlarge file meta cache by @waynexia in #8499
  • feat: support per-region write buffer limits by @evenyag in #8473
  • feat: support SCRAM auth for Postgres by @killme2008 in #8304
  • feat(meta): add retention GC for soft-dropped tables by @v0y4g3r in #8526 (Enterprise-only in v1.2.0; see upgrade notes.)
  • feat: support soft-drop recycle bin and UNDROP TABLE by @v0y4g3r in #8546 (Enterprise-only in v1.2.0; see upgrade notes.)
  • feat: support splunk HEC raw endpoint by @agrawalx in #8491
  • feat: enable soft-drop table lifecycle by @v0y4g3r in #8554 (Enterprise-only in v1.2.0; see upgrade notes.)
  • feat: allow unknown PluginOptions with a warning message by @sunng87 in #8550
  • feat(mito2): expose adaptive batch APIs by @evenyag in #8578
  • feat: grant creators access to newly created databases by @shuiyisong in #8566
  • feat(flow): handle time_ranges in DirtyWindowRequest by @v0y4g3r in #8582
  • feat: add mysql object store backend by @fengys1996 in #8560
  • feat: add a region hook for gc cleanup by @sunng87 in #8547
  • feat(json2): support JSON2 nested path fallback reads by @fengys1996 in #8540
  • feat: update flow windows after metric batch flush by @v0y4g3r in #8544
  • feat: make parquet row group size configurable by @evenyag in #8446
  • feat(mito): add candidate series scanner by @evenyag in #8586
  • feat: invoke gc hook for offline region cleanup by @sunng87 in #8613
  • feat(procedure): support trigger-aware procedure events by @WenyXu in #8549
  • feat(event-recorder): configure lifecycle event recording by @WenyXu in #8648
  • feat: add database DDL procedure events by @WenyXu in #8623
  • feat(common-query): add native histogram runtime model by @shuiyisong in #8656
  • feat: add procedure events for Flow DDL by @WenyXu in #8632
  • feat: update dashboard to v0.13.8 by @sunchanglong in #8666
  • feat: add extra http router provider in metasrv plugin by @MichaelScofield in #8662
  • feat(promql): add native histogram functions by @shuiyisong in #8664
  • feat: add events for create and drop view by @WenyXu in #8626
  • feat: add a dedicated http api server port by @sunng87 in #8657
  • feat: record metrics for timed out explain analyze by @v0y4g3r in #8668
  • feat: update dashboard to v0.13.9 by @sunchanglong in #8674
  • feat(metasrv): add repartition lifecycle events by @WenyXu in #8665
  • feat: support time range in manual compaction by @v0y4g3r in #8669
  • feat: update dashboard to v0.13.10 by @sunchanglong in #8687
  • feat: add table DDL procedure events by @WenyXu in #8627
  • feat: expose MitoRegion::all_manifest_files for metadata rebuild by @sunng87 in #8680
  • feat(metasrv): record WAL prune procedure events by @WenyXu in #8677
  • feat(query): add native histogram result plumbing by @shuiyisong in #8693
  • feat(metasrv): add batch GC lifecycle events by @WenyXu in #8673
  • feat(mito2): support cancelling flush jobs by @evenyag in #8685
  • feat: support enabling skip_wal with ALTER TABLE by @evenyag in #8817
  • feat: make frontend heartbeat extensible and lifecycle-safe by @fengjiachun in #8726
  • feat(mito2): discard unflushed region data safely by @evenyag in #8600
  • feat: add admin function to discard unflushed data by @evenyag in #8768
  • feat(flow): add information_schema.flow_statistics and SHOW FLOW STATUS (distributed start_time/uptime_seconds are NULL) by @onepizzateam in #8392
  • feat: update to pgwire 0.40.7 by @sunng87 in #8860
  • feat: update dashboard to v0.13.13 by @sunchanglong in #8898
  • feat(event): add event context to procedure events by @WenyXu in #8734
  • feat(event): record admin function executions by @WenyXu in #8835
  • feat(procedure): record event actor by @WenyXu in #8849
  • feat(mito2): adapt bulk memtable encode threshold to write buffer size [Backport release/v1.2] by @MichaelScofield in #9061
  • feat(pipeline): support table-aware JSON2 transforms by @shuiyisong in #8964
  • feat(json2): support JSON2 paths in SQL functions by @MichaelScofield in #9007
  • feat(json2): support empty and null JSON2 value by @fengys1996 in #9010
  • feat(json2): support list indexing for JSON2 columns by @MichaelScofield in #9013

πŸ› Bug Fixes​

  • fix(metric-engine): report query load under physical region id by @v0y4g3r in #8355
  • fix(mito): failed to compact memtable with json2 by @fengys1996 in #8297
  • fix(mito): honor unknown file lingering time by @discord9 in #8365
  • fix(meta): configure heartbeat message size by @discord9 in #8411
  • fix(flow): rebind stale snapshot fence by @discord9 in #8409
  • fix: spawn read operations on query runtime by @v0y4g3r in #8433
  • fix: collect lightweight query-load metrics by @v0y4g3r in #8437
  • fix: preserve close-time flush responses by @fengjiachun in #8443
  • fix: pause GC during maintenance mode by @discord9 in #8450
  • fix: compare all LoggingOptions fields in PartialEq by @raphaelroshan in #8449
  • fix: Use prepared file locations for CSV strict headers integration test by @evenyag in #8493
  • fix: disable WAL index creation by default by @WenyXu in #8505
  • fix: require metasrv GC for repartition by @WenyXu in #8497
  • fix: reject datanode startup on GC config mismatch by @discord9 in #8509
  • fix: close database ACL gaps in permission checks by @shuiyisong in #8492
  • fix(promql): preserve ordinary NaN samples by @discord9 in #8494
  • fix(promql): handle missing labels in or matching by @discord9 in #8504
  • fix(ci): harden query regression runner by @discord9 in #8534
  • fix: count Postgres SCRAM auth failures and correct auth config docs by @killme2008 in #8538
  • fix(ci): summarize query regression in one table by @discord9 in #8536
  • fix(mito2): adapt batch size for wide rows by @evenyag in #8543
  • fix: stream remote analyze metrics while pending by @discord9 in #8405
  • fix: enforce table-aware permissions across query and ingest protocols by @shuiyisong in #8552
  • fix: stabilize remote analyze stage ordering by @discord9 in #8584
  • fix: bind Prom remote read schema per query by @discord9 in #8591
  • fix: convert literals in joins and subqueries by @discord9 in #8501
  • fix(query): harden range time conversion by @discord9 in #8515
  • fix(json2): treat empty object as null when insert by @MichaelScofield in #8602
  • fix(json2): encode deeply nested values as jsonb by @fengys1996 in #8612
  • fix: enforce COPY FROM row limit by @discord9 in #8551
  • fix(flow): avoid duplicate incremental planning warnings by @discord9 in #8611
  • fix: fail closed on malformed password assignments by @fengjiachun in #8622
  • fix(metric-engine): validate logical projection indices by @discord9 in #8535
  • fix(datatypes): replicate nested list and struct vectors by @shuiyisong in #8638
  • fix: honor default prefix for all metric columns by @shuiyisong in #8640
  • fix(servers): validate remote write native histograms by @shuiyisong in #8654
  • fix(promql): preserve query-aligned range tail by @discord9 in #8650
  • fix(partition): avoid panic on missing route columns by @discord9 in #8645
  • fix(prometheus): make remote write timeout retryable by @v0y4g3r in #8639
  • fix: configure datanode client gRPC message limits by @evenyag in #8642
  • fix: scope live analyze metrics to streaming requests by @discord9 in #8644
  • fix(mito2): suppress empty compaction skip logs by @v0y4g3r in #8667
  • fix(mysql): fail closed on unrepresentable timestamps by @discord9 in #8580
  • fix: enforce permissions for restricted HTTP endpoints by @shuiyisong in #8672
  • fix(repartition): enforce GC across lifecycle by @killme2008 in #8678
  • fix(json2): standardize widening and projection cast semantics by @fengys1996 in #8661
  • fix: preserve dictionary regex filter semantics by @discord9 in #8688
  • fix(query): use physical partition types for metric route pruning by @discord9 in #8590
  • fix(query): handle empty operands in PromQL or by @discord9 in #8502
  • fix(mito2): make async index publication conditional by @killme2008 in #8676
  • fix(metric-engine): prevent stale metadata cache fills by @shuiyisong in #8699
  • fix(mito2): fence async index builds by schema generation by @killme2008 in #8697
  • fix: make select whole json2 column worked by @MichaelScofield in #8683
  • fix(meta): preserve legacy WAL options compatibility by @WenyXu in #8707
  • fix: add public constructor for compactor by @sunng87 in #8724
  • fix: backport Prometheus and skip_wal fixes to v1.2 by @evenyag in #8838
  • fix(mito2): limit compaction picker threads by @v0y4g3r in #8704
  • fix: clear pooled Prometheus Remote Write decoder state by @shuiyisong in #8921
  • fix(flow): fix flow stats aggregation and df_plan_to_sql quoting by @discord9 in #8729
  • fix(frontend): remove gRPC DDL panics for DropView and non-timestamp time index by @discord9 in #8739
  • fix(prometheus): custom column remote reads by @grezzko in #8659
  • fix(query): avoid unsafe count wildcard rewrites by @discord9 in #8522
  • fix(query): validate merge scan remote schema by @discord9 in #8579
  • fix(mito2): fail open when Bloom IN predicate has non-literal or unencodable members by @discord9 in #8709
  • fix(mito): re-encode bulk WAL entry after filling missing columns by @fengjiachun in #8808
  • fix(mito2): keep deletion markers when compacting part of a window by @fengjiachun in #8872
  • fix(query): respect query timezone in timestamp casts by @fzlzjerry in #8859
  • fix(query): preserve timestamp literal semantics in inserts by @killme2008 in #8889
  • fix(metric-engine): handle Utf8View tag/label columns without panicking by @discord9 in #8772
  • fix: cache physical table metadata lookups by @shuiyisong in #8777
  • fix: harden permission checks and process visibility by @shuiyisong in #8852
  • fix(event): preserve procedure lifecycle locators by @WenyXu in #8787
  • fix(meta): release region guards after drop rollback by @WenyXu in #8751
  • fix(object-store): fix unused import on Windows after #8735 by @discord9 in #8752
  • fix(frontend): isolate internal Flight authentication by @discord9 in #9045
  • fix: match system schema names case-insensitively [Backport release/v1.2] by @MichaelScofield in #9041
  • fix: re-scan stream-backed tables in recursive CTEs [Backport release/v1.2] by @MichaelScofield in #9052
  • fix(pipeline): coalesce concurrent pipeline cache misses and restore cache TTL configuration for v1.2 by @killme2008 in #9022 The release also retains configurable pipeline.cache_ttl (default 10s).
  • fix(mito2): fence checkpoints during region transitions by @WenyXu in #8847
  • fix(mito2): split SSTs at primary key series boundaries by @v0y4g3r in #8888
  • fix(query): keep INSERT timestamp conversion out of the source query by @killme2008 in #8911
  • fix(mysql): interpret prepared statement datetime params in session timezone by @wy471x in #8923
  • fix(meta): allow manual migration from offline datanodes by @WenyXu in #8934
  • fix(flight): bound DoGet response wait by @WenyXu in #8943
  • fix(mito2): use target sequence for foreign SSTs by @discord9 in #8946
  • fix: update tokio-postgres and correct explain/fetch cursor output schema by @sunng87 in #8955
  • fix: postgres describe for more statements by @sunng87 in #8974
  • fix(promql): resolve derived labels in aggregation arithmetic by @shuiyisong in #8994
  • fix(json2): keep empty structs in remainder by @MichaelScofield in #9027

🚜 Refactor​

πŸ“š Documentation​

  • docs(agents): add per-crate guides, architecture invariants, and generated-files list by @killme2008 in #8346
  • docs: add project-level AGENTS.md as the shared agent guide by @killme2008 in #8358
  • docs: add entity relationships and graph query RFC by @killme2008 in #8605

⚑ Performance​

  • perf: reduce parquet metadata cache footprint by @waynexia in #8527
  • perf: preserve dictionary-encoded query labels by @waynexia in #8541
  • perf: optimize OTLP trace ingestion by @shuiyisong in #8604
  • perf(servers): optimize PromQL read conversion by @lyang24 in #8587
  • perf(mito2): make compaction picker asynchronous to avoid blocking the region worker by @v0y4g3r in #8624
  • perf(query): prune RangeSelect input projections by @discord9 in #8570

πŸ§ͺ Testing​

βš™οΈ Miscellaneous Tasks​

New Contributors​

All Contributors​

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

@agrawalx, @BootstrapperSBL, @discord9, @evenyag, @fengjiachun, @fengys1996, @fzlzjerry, @grezzko, @killme2008, @lyang24, @MichaelScofield, @onepizzateam, @QuakeWang, @raphaelroshan, @shuiyisong, @srivtx, @sunchanglong, @sunng87, @v0y4g3r, @waynexia, @WenyXu, @wy471x, @yimeng, @ZonaHex

Full Changelog: https://github.com/GreptimeTeam/greptimedb/compare/v1.1.0...v1.2.0

v1.3.0-alpha.1

Β· 10 min read

Release date: September 03, 2026

GreptimeDB v1.3.0-alpha.1 adds a telemetry entity-relationships graph, expands Native Histogram query coverage, and updates Dashboard for early validation.

πŸ‘ Highlights​

  • Telemetry entity relationships graph. GreptimeDB derives service-call relationships from OTLP traces at query time. To add application entities, declare their identity columns on the source table:

    ALTER TABLE app_metrics SET
    'greptime.semantic.entity.service.id' = 'service_name',
    'greptime.semantic.entity.service.scope' = 'env';

    To maintain dependencies that traces do not observe, insert a declared edge:

    INSERT INTO greptime_private.semantic_relationships_declared
    (observed_at, src_type, src_id, rel_type, dst_type, dst_id,
    provenance, scope, generation_id, confidence)
    VALUES
    (now(), 'service', 'frontend', 'depends_on', 'service', 'users-db',
    'declared', '', '', 1.0);

    Query derived and declared relationships together from greptime_private.semantic_relationships.

  • Native Histogram query support and experimental OTLP ingestion. PromQL supports Native Histogram selection, functions including rate() and delta(), vector operators, aggregations, and histogram_quantile / histogram_fraction across classic, Native, and mixed inputs. Prometheus HTTP returns Native Histogram query results and annotations. Experimental, opt-in ingestion of cumulative OTLP ExponentialHistogram metrics is available through otlp.experimental_enable_exponential_histogram; OTLP delta temporality remains unsupported.

  • Dashboard. Bundled Dashboard v0.13.14 adds full snapshot export and configurable table widths, and updates Perses to v0.54.

Breaking changes​

  • refactor!: move native histogram config and prom_validation_mode to prom_store by @shuiyisong in #8744
  • perf(servers)!: speed up Prometheus JSON response building with ryu and per-series entry reuse by @discord9 in #8815
  • feat!: stabilize streaming analyze metrics by @discord9 in #8966

πŸš€ Features​

  • feat(query): plan native histogram functions by @shuiyisong in #8705
  • feat(logging): add enable_file_logging option to disable file logging by @xhwhis in #8721
  • feat(function): add json_object_keys scalar function by @xhwhis in #8722
  • feat: update dashboard to v0.13.11 by @sunchanglong in #8737
  • feat: add health-aware gRPC client routing by @WenyXu in #8684
  • feat(grafana): add events dashboard by @WenyXu in #8725
  • feat: add admin function registrar by @fengjiachun in #8762
  • feat(promql): define native histogram semantics by @shuiyisong in #8758
  • feat(mito2): add range-based metric series reader by @evenyag in #8703
  • feat: read-time entity relationships graph over telemetry (M0+M1) by @killme2008 in #8614
  • feat(protocol): validate native histogram ingestion by @shuiyisong in #8775
  • feat: support generic heartbeat response extension accumulation by @fengjiachun in #8786
  • feat: support old-stage datanode config overlays by @discord9 in #8647
  • feat: update opentelemetry family to 0.32 series by @sunng87 in #8776
  • feat: add riscv64 cross-build support by @v0y4g3r in #8820
  • feat(auth): support HTTP bearer-token authentication by @sunng87 in #8719
  • feat(promql): support mixed sample ranges by @shuiyisong in #8784
  • feat: declared edges and the derivation contract for the entity graph by @killme2008 in #8794
  • feat(servers): stamp prometheus remote write v2 metadata as semantic table options by @killme2008 in #8797
  • feat(promql): support native histogram vector operators by @shuiyisong in #8798
  • feat: complete the derived-edge vocabulary of the entity graph by @killme2008 in #8836
  • feat(servers): expose native histograms over Prometheus HTTP by @shuiyisong in #8850
  • feat(promql): support native histogram aggregations by @shuiyisong in #8848
  • feat: embedded convention pack for the entity graph (prom/k8s, gen_ai naming) by @killme2008 in #8854
  • feat(mito2): introduce two-phase metric series scans by @evenyag in #8826
  • feat: add json_object function and use it in the entity-graph derivation by @killme2008 in #8870
  • feat: update dashboard to v0.13.12 by @sunchanglong in #8882
  • feat: add incremental primary key index writer by @evenyag in #8788
  • feat: manage semantic table options via ALTER TABLE SET/UNSET by @killme2008 in #8880
  • feat(otlp): report the cause of rejected trace spans by @killme2008 in #8897
  • feat: otlp duration_nano and trace_flag signed integer coercion by @sunng87 in #8816
  • feat: support quantile and fraction queries on mixed histograms by @shuiyisong in #8874
  • feat(otlp): support cumulative exponential histograms by @shuiyisong in #8900
  • feat(cmd): add parquet development tools by @evenyag in #8939
  • feat(mito2): add series index searcher by @evenyag in #8926
  • feat(cmd): improve parquet rewrite fidelity and scanbench output by @evenyag in #8947
  • feat(function): expose uddsketch rank by @v0y4g3r in #8929
  • feat: synthesize OTLP resource descriptor for the semantic entity graph by @killme2008 in #8904
  • feat(ci): run query regression on ephemeral Aliyun ECS runners by @paomian in #8937
  • feat: update dashboard to v0.13.14 by @sunchanglong in #8968
  • feat: harden frontend heartbeat extensions by @v0y4g3r in #8803
  • feat(meta): record physical table reconciliation events by @dhruvxvaishnav in #8935
  • feat: expose missing SST manifest fields by @evenyag in #8965
  • feat: Add built-in daemon mode for standalone service by @tian1220A in #8960
  • feat(pipeline): support table-aware JSON2 transforms by @shuiyisong in #8964
  • feat: report what the graph derives and fix two duplicate-node bugs by @killme2008 in #8936
  • feat(function): add mergeable stddev_pop state functions by @v0y4g3r in #8972
  • feat(mito2): add SST range index writer by @evenyag in #8954
  • feat(query): add experimental DataFusion spill-to-disk controls by @discord9 in #8884
  • feat(mito2): add write cache upload hook by @v0y4g3r in #8992
  • feat(flow): add generic delta merge for incremental aggregates by @discord9 in #8938
  • feat: allow widening the time index column's timestamp unit via ALTER TABLE, mito2 table only by @sunng87 in #8894
  • feat: derive k8s.node from OTLP resource attributes by @killme2008 in #9002
  • feat(runtime): add weighted workload scheduler by @discord9 in #8736
  • feat(flow): add row inserts to frontend client by @fengys1996 in #9006
  • feat(json2): support JSON2 paths in SQL functions by @MichaelScofield in #9007
  • feat: preserve row sequences and support exact sequence-range reads by @discord9 in #8865
  • feat(mito2): add SST range index searcher by @evenyag in #9003
  • feat(json2): support empty and null JSON2 value by @fengys1996 in #9010
  • feat(mito2): pass operation type to write cache upload hook by @v0y4g3r in #9012
  • feat(json2): support list indexing for JSON2 columns by @MichaelScofield in #9013

πŸ› Bug Fixes​

  • fix(mito2): prioritize newer compaction windows by @v0y4g3r in #8714
  • fix(auth): warn when credential load disables Postgres SCRAM or drops a line by @killme2008 in #8652
  • fix(object-store): skip removed-entry lister test on Windows by @discord9 in #8735
  • fix(query): preserve remote dynamic filter target by @discord9 in #8615
  • fix(operator): invalidate local cache after dropping view by @WenyXu in #8748
  • fix(ci): render query regression bot comment as compact table plus threshold details by @discord9 in #8774
  • fix(mito2): avoid region worker panic when building a WAL entry fails by @fengjiachun in #8810
  • fix(ci): identify team members by repository permission by @killme2008 in #8822
  • fix(tests): make two Windows CI failures deterministic (Nightly CI #8837) by @discord9 in #8840
  • fix(ci): grant pull-requests write and stop counting drafts by @killme2008 in #8844
  • fix(mito2): publish committed sequence only after rows are installed by @discord9 in #8862
  • fix: cap default runtime sizes to a minimum of 2 threads by @v0y4g3r in #8908
  • fix(meta): avoid blocking runtime on stats cache lock by @WenyXu in #8910
  • fix(flow): restore FrontendClient::sql API by @WenyXu in #8963
  • fix(operator): whitelist private system table auto create by @WenyXu in #8930
  • fix(cmd): configure meta client in frontend plugin test by @v0y4g3r in #8977
  • fix: increase system disk size to 50 GiB for ECS instances by @paomian in #8986
  • fix(cmd): gate daemon integration test on Unix by @discord9 in #8987
  • fix(mito2): avoid chained L1 rewrites in TWCS by @v0y4g3r in #8981
  • fix: add disk usage logging to GitHub step summary in query regression workflow by @paomian in #9005

🚜 Refactor​

πŸ“š Documentation​

⚑ Performance​

πŸ§ͺ Testing​

  • test: rename internal bug numbers in tests to semantic names by @discord9 in #8779
  • test(mito2): isolate sequence publication barrier by @discord9 in #8876
  • test: renew etcd TLS certificates by @WenyXu in #8956

βš™οΈ Miscellaneous Tasks​

New Contributors​

All Contributors​

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

@dhruvxvaishnav, @discord9, @evenyag, @fengjiachun, @fengys1996, @grezzko, @killme2008, @lyang24, @MichaelScofield, @onepizzateam, @paomian, @shuiyisong, @sunchanglong, @sunng87, @tian1220A, @v0y4g3r, @WenyXu, @wy471x, @xhwhis

v1.2.0-beta.2

Β· 5 min read

Release date: August 21, 2026

GreptimeDB v1.2.0-beta.2 is the second beta of the v1.2 line. It focuses on safer table administration, better Flow and procedure observability, continued JSON2 preparation, and query and storage correctness fixes.

πŸ‘ Highlights​

  • One-way skip_wal changes with ALTER TABLE β€” You can enable skip_wal on supported tables with ALTER TABLE, and the change is validated against the table's leader routes before the irreversible metadata update. The transition is intentionally one-way: changing skip_wal back to false is rejected (#8817, #8838).

  • JSON2 extension and layout preparation β€” JSON2 now has a separate extension type, type hints can be pushed down to Parquet reads, and DDL accepts JSON2 storage-layout settings. The v2 physical-layout primitives are prepared, but the v2 physical layout is not activated by this release (#8745, #8833, #8895, #8901).

  • Procedure and administration event observability β€” Procedure events now carry structured context, lifecycle locators, submission context, and the actor; admin function executions are recorded as events, and the shared query-channel definition keeps event protocol information consistent (#8734, #8787, #8834, #8835, #8856, #8849, #8825).

  • Safer discard-unflushed operations β€” The frontend heartbeat is extensible and lifecycle-safe, while storage can discard unflushed region data while preserving persisted SST files and expose the operation through an admin function (#8726, #8600, #8768).

  • Dictionary tag group-by path restored β€” The columnar group-by path works again for dictionary-encoded tag columns (#8902).

Dashboard​

The bundled GreptimeDB dashboard was updated from v0.13.10 to v0.13.13 (#8898). The update includes:

Breaking changes​

  • Soft-drop and recovery are enterprise-only again in beta2. PR #8747 gates soft-drop tables, UNDROP TABLE, ADMIN purge_table(), information_schema.recycle_bin, and expired soft-drop garbage collection behind the enterprise feature. This reverses the beta1 behavior that made these operations available in OSS. An OSS beta2 metasrv rejects gc.experimental_soft_drop.enable = true during startup, so remove that setting before upgrading. OSS beta2 also cannot recover or purge tables already soft-dropped in beta1 and does not run their expired-tombstone cleanup; recover any tables you may need before upgrading, or use Enterprise Edition to continue the soft-drop lifecycle. This is by @v0y4g3r.

  • Native histogram persisted fields change signedness. PR #8824 changes persisted native-histogram span-length list elements from UInt32 to Int32 and integer count fields from UInt64 to Int64, including renaming count_u64/zero_count_u64 to count_i64/zero_count_i64. Existing native-histogram Struct data written with the previous schema may be unreadable in beta2, and rolling binaries back does not restore or convert data written with the changed fields. There is no migration, downgrade, or mixed-version compatibility layer; do not run mixed versions, and establish a migration or reingestion plan before upgrading. This is by @sunng87.

πŸš€ Features​

  • Add information_schema.flow_statistics and SHOW FLOW STATUS for Flow runtime observability; in distributed Flow, start_time and uptime_seconds remain unavailable (NULL) in this release (#8392) by @onepizzateam.
  • Safely discard unflushed region data while retaining persisted SST files (#8600) by @evenyag.
  • Make the frontend heartbeat extensible and lifecycle-safe (#8726) by @fengjiachun.
  • Add structured event context to procedure events (#8734) by @WenyXu.
  • Separate the JSON2 extension type from the legacy JSON extension type (#8745) by @MichaelScofield.
  • Add an admin function to discard unflushed data (#8768) by @evenyag.
  • Support enabling skip_wal with ALTER TABLE (#8817) by @evenyag.
  • Share the query-channel definition across components while preserving its wire values (#8825) by @WenyXu.
  • Push JSON2 type hints down to Parquet reads (#8833) by @fengys1996.
  • Centralize procedure event-context handling (#8834) by @WenyXu.
  • Record admin function executions as events (#8835) by @WenyXu.
  • Record the actor for procedure events (#8849) by @WenyXu.
  • Separate procedure submission context (#8856) by @WenyXu.
  • Update to pgwire 0.40.7 (#8860) by @sunng87.
  • Support JSON2 storage-layout settings in DDL (#8895) by @MichaelScofield.
  • Add JSON2 v2 physical-layout primitives; the v2 layout is not activated by this release (#8901) by @MichaelScofield.

πŸ› Bug Fixes​

  • Avoid unsafe count(*) wildcard rewrites (#8522) by @discord9.
  • Validate remote schemas in MergeScan (#8579) and ignore field metadata during that validation (#8818), both by @discord9.
  • Resolve custom timestamp and value columns in Prometheus remote reads (#8659) by @grezzko.
  • Limit compaction picker threads and provide a bounded compact-runtime blocking pool (#8704) by @v0y4g3r.
  • Fail open when Bloom-filter IN predicates contain non-literal or unencodable members (#8709) by @discord9.
  • Add a public compactor constructor (#8724) by @sunng87.
  • Fix Flow statistics aggregation and quoting in df_plan_to_sql (#8729) by @discord9.
  • Remove gRPC DDL panics for DropView and non-timestamp time indexes (#8739) by @discord9.
  • Release region guards after a drop rollback (#8751) by @WenyXu.
  • Handle Utf8View tag and label columns without panicking (#8772) by @discord9.
  • Cache physical-table metadata lookups (#8777) by @shuiyisong.
  • Preserve procedure lifecycle locators (#8787) by @WenyXu.
  • Re-encode bulk WAL entries after filling missing columns (#8808) by @fengjiachun.
  • Backport the Prometheus response Utf8View handling and skip_wal leader validation in one release-branch fix (#8838) by @evenyag. This is the release-branch umbrella for upstream fixes #8754 and #8823; it is listed here only once.
  • Bump DataFusion to support dictionary literals in Substrait plans (#8842) by @discord9.
  • Harden permission checks and process visibility (#8852) by @shuiyisong.
  • Remove the iceberg.read permission action (#8858) by @shuiyisong.
  • Respect query time zones in timestamp casts (#8859) by @fzlzjerry.
  • Keep deletion markers when compacting part of a window (#8872) by @fengjiachun.
  • Preserve timestamp literal semantics in inserts (#8889) by @killme2008.
  • Restore columnar group-by for dictionary-encoded tags (#8902) by @discord9.
  • Clear pooled Prometheus Remote Write decoder state (#8921) by @shuiyisong.

All Contributors​

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

@discord9, @evenyag, @fengjiachun, @fengys1996, @fzlzjerry, @grezzko, @killme2008, @MichaelScofield, @onepizzateam, @shuiyisong, @sunchanglong, @sunng87, @v0y4g3r, @WenyXu

Full Changelog: https://github.com/GreptimeTeam/greptimedb/compare/v1.2.0-beta.1...v1.2.0-beta.2

v1.2.0-beta.1

Β· 12 min read

Release date: July 31, 2026

GreptimeDB v1.2.0-beta.1 is the first beta of the v1.2 line. It brings the JSON2 type system to maturity, large query performance improvements via dictionary-encoded series keys, Prometheus Remote Write v2 native histogram support, and a large set of correctness and stability fixes.

πŸ‘ Highlights​

  • JSON2 type system maturity β€” Variant payloads are now encoded as JSONB instead of serde JSON bytes, with type hints, write-time validation (rejecting non-object values and validating append mode), and a fix for selecting whole JSON2 columns (#8247, #8381, #8434, #8435, #8683).

    CREATE TABLE t (id INT, doc JSON2);
    INSERT INTO t VALUES (1, '{"a": 1, "b": [1, 2]}');
    SELECT doc FROM t; -- returns the full JSON document
  • Faster queries with dictionary-encoded series keys β€” In-memory primary key columns now use dictionary arrays to alleviate series key expansion, gaining ~24% end-to-end query performance (#8541); dictionary-encoded regex filters also get correct semantics and the fast path back (#8688).

    SELECT * FROM metrics WHERE job = 'node' AND path ~ '/api/.*';
    -- regex filters on dictionary-encoded columns are now semantically correct and fast
  • Security hardening and access control β€” Local-file SQL access is sandboxed and datanode local-file access is disabled in distributed deployments (#8708 β€” breaking change, see below and the migration guide); table-level permission checks are enforced across query and write protocols (#8552), database ACL gaps are closed and creators get access to newly created databases (#8492, #8566), restricted HTTP endpoints require authentication (#8672), Postgres now supports SCRAM-SHA-256 (#8304), and an optional dedicated API server port (http.enable_api_server, default false; http.api_server_addr, default 127.0.0.1:4006) exposes only /v1 and the dashboard (#8657).

  • Prometheus Remote Write v2 with native histograms β€” Support for the Remote Write v2 protocol (#8361), persistence and validation of native histograms (#8382, #8654), and PromQL native histogram functions (#8664). Prometheus sends v1 unless protobuf_message is set; native histogram ingestion is experimental and disabled by default (experimental_enable_prometheus_native_histogram under [http]).

    remote_write:
    - url: http://greptimedb:4000/v1/prometheus/write
    protobuf_message: io.prometheus.write.v2.Request
  • Splunk HEC ingestion β€” New Splunk HEC-compatible endpoints at /v1/splunk/services/collector/event and /v1/splunk/services/collector/raw, with health probes, gzip support, and pipeline override via the x-greptime-pipeline-name header (#8321, #8491). Vector's splunk_hec_logs sink, the OpenTelemetry Collector splunk_hec exporter, and Fluent Bit can point at GreptimeDB by changing URL and token; when authentication is enabled the token must be formatted as username:password.

  • Cluster lifecycle events β€” The event recorder now covers table, database, flow, and view DDL events on top of region migration, plus WAL prune, batch GC, and repartition events (#8549, #8623, #8626, #8627, #8632, #8648, #8665, #8673, #8677). Configure with [event_recorder] ttl (default 90 days) and event_types (omitted = record all, [] = disabled); docs: docs#2678.

  • Streaming EXPLAIN ANALYZE β€” POST /v1/sql/analyze/stream streams per-stage metrics while a distributed query is still running, instead of waiting for completion; slow queries also record metrics on timeout. Enabled by default (http.experimental_enable_explain_analyze_stream, default true) (#8380, #8405, #8584, #8644, #8668).

  • PromQL semantics aligned with Prometheus β€” Ordinary NaN samples are preserved, or matching handles missing labels and empty operands, range queries align to range tails, and remote read schemas are bound per query (#8494, #8502, #8504, #8650, #8591); promql-parser updated to v0.10 (#8457).

  • Finer control over flush and compaction β€” Table-level auto_flush_interval with ALTER TABLE SET (#8357, #8403), per-region write buffer limits (#8473), configurable parquet row group size (#8446), ADMIN COMPACT_TABLE with start_time/end_time ranges (#8669), and cancelable flush jobs (#8685).

  • RangeSelect projection pruning β€” Range queries now prune unused input columns before the RangeSelect plan, reducing scanned columns and I/O (#8570).

    EXPLAIN SELECT ts, value FROM metrics WHERE ts > now() - INTERVAL '1 hour';
    -- only the needed columns are scanned
  • Parallel, resumable export/import v2 β€” The snapshot-based export/import v2 gained concurrent chunk export (--chunk-parallelism), parallel import tasks (--task-parallelism), and progress reporting (--progress auto|always|never); resume works by re-running the same command, which skips completed chunks and tasks instead of starting over. See the export/import v2 guide.

    greptime cli data export-v2 create \
    --addr 127.0.0.1:4000 \
    --to file:///tmp/greptime-snapshots/demo \
    --chunk-parallelism 4
    # rerun the same command to resume from existing progress
  • Also notable β€” MySQL as an object store backend (#8560; repartition unsupported on it), Flow scheduling and window-update stability fixes (#8360, #8544, #8582, #8389, #8409, #8611), and repartition polish (#8291, #8497, #8678).

Dashboard​

The bundled GreptimeDB dashboard was updated to v0.13.10:

  • Save dashboards as self-contained snapshots (time range, variables, and panel data) that open read-only without querying live data sources (dashboard#627).
  • Result tables support column resizing for easier inspection, including trace queries, with a dedicated table resize mode (dashboard#628, #632, #635, #636).
  • New prominent support menu and refreshed icon/status styling (dashboard#629).
  • PromQL editor fixes (query header, Prometheus plugin sync) and all supported Perses plugins (dashboard#630, #631, #633).
  • Virtual-list logs show a tip for hidden columns; SQL editor executes correctly when the cursor is after a SQL line (dashboard#637, #622).

Breaking changes​

πŸš€ Features​

πŸ› Bug Fixes​

All Contributors​

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

@BootstrapperSBL, @MichaelScofield, @QuakeWang, @WenyXu, @ZonaHex, @agrawalx, @discord9, @evenyag, @fengjiachun, @fengys1996, @killme2008, @lyang24, @raphaelroshan, @shuiyisong, @srivtx, @sunchanglong, @sunng87, @v0y4g3r, @waynexia

v1.1.4

Β· 2 min read

Release date: July 24, 2026

GreptimeDB v1.1.4 is a focused maintenance release improving correctness for streaming Flow expiration and timestamp presentation over MySQL. It also includes stability, query-validation, metadata-client, and storage fixes.

We recommend users on earlier v1.1 releases upgrade to v1.1.4.

πŸ‘ Highlights​

  • Streaming Flow EXPIRE AFTER values are now converted to the correct time unit, preventing state from expiring too early. Negative values are rejected while 0 remains valid.
  • MySQL timestamp results now respect the column's configured precision, avoiding padded millisecond values and truncated nanosecond values.
  • MetaSrv leader caching is now enabled correctly after leader election, restoring leader-side metadata-cache performance.
  • Compaction scheduling now removes stale status after throttling, so later compaction work can continue normally.

πŸ› Bug Fixes​

  • fix(query): validate DistAnalyzeExec child count by @discord9 in #8510
  • fix: avoid panic when negating MIN-valued literals by @raphaelroshan in #8484
  • fix: preserve nulls in timestamp arrays by @discord9 in #8508
  • fix: timestamp display precision should respect column schema (#8227) by @divyansh-1009 in #8238
  • fix(mito): chunk manifest object writes by @WenyXu in #8567
  • fix: display codes in metasrv client errors by @evenyag in #8558
  • fix(mito): notify bulk writes on WAL error by @v0y4g3r in #8563
  • fix: ignore dropping marker during GC by @v0y4g3r in #8588
  • fix(query): preserve bare plan names in analyze json by @discord9 in #8519
  • fix(flow): lower routine batching messages to debug by @discord9 in #8592
  • fix(flow): downgrade disabled incremental checkpoint log by @discord9 in #8572
  • fix: demote expected remote dynamic filter misses by @discord9 in #8574
  • fix: prevent credential leaks in sanitize_connection_string by @raphaelroshan in #8539
  • fix(mito2): remove stale compaction status when next compaction is throttled by @v0y4g3r in #8618
  • fix(meta): configure gRPC message limits by @WenyXu in #8616
  • fix(flow): convert streaming expiration to milliseconds by @QuakeWang in #8481
  • fix: qualify scalar-subquery tables in persisted views by @discord9 in #8581
  • fix: preserve leader cache configuration and record cache hits by @WenyXu in #8576

All Contributors​

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

@QuakeWang, @WenyXu, @discord9, @divyansh-1009, @evenyag, @raphaelroshan, @v0y4g3r

v1.1.3

Β· 2 min read

Release date: July 17, 2026

GreptimeDB v1.1.3 is a patch release for the v1.1 line. It improves query correctness, storage stability, and the bundled dashboard.

We recommend users on earlier v1.1 releases upgrade to v1.1.3.

πŸ‘ Highlights​

  • Scalar-subquery rewrites preserve global ordering for ORDER BY ... DESC LIMIT 1 branches, avoiding a region-local latest row when the branch becomes an intermediate join input.
  • PromQL range and instant selectors can now push cast-based time filters to datanodes for metric tables using TIMESTAMP(6) or TIMESTAMP(9), improving scan pruning.

Dashboard​

  • The embedded GreptimeDB dashboard was updated to v0.13.7. Table views are easier to resize and inspect, and the support menu is more prominent.
  • Dashboard snapshots can now capture the current time range, variable values, and panel query results in a self-contained, read-only dashboard that can be saved, exported, and opened without querying live data sources.

πŸš€ Features​

πŸ› Bug Fixes​

All Contributors​

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

@WenyXu, @discord9, @fengjiachun, @sunchanglong, @sunng87, @v0y4g3r

v1.1.2

Β· 3 min read

Release date: July 02, 2026

GreptimeDB v1.1.2 is a patch release for the v1.1 line. It fixes scheduled Flow runtime semantics, improves slow-query context, and refreshes the bundled dashboards.

We recommend users on v1.1.0 and v1.1.1 upgrade to v1.1.2.

πŸ‘ Highlights​

Scheduled Flow execution now uses stable logical time. Flows with EVAL INTERVAL now bind now() and current_timestamp() to the scheduled runtime, including distributed plans. This keeps scheduled windows stable instead of depending on when a worker happens to plan the query.

CREATE TABLE flow_input (
ts TIMESTAMP(3) TIME INDEX,
v DOUBLE,
PRIMARY KEY(v)
);

CREATE FLOW flow_eval
SINK TO flow_eval_sink
EVAL INTERVAL '1s'
AS
SELECT
date_bin(INTERVAL '1 second', ts) AS window_start,
count(v) AS value_count,
now() AS scheduled_at
FROM flow_input
WHERE ts >= date_trunc('second', now()) - INTERVAL '1 second'
AND ts < date_trunc('second', current_timestamp())
GROUP BY date_bin(INTERVAL '1 second', ts);

Slow query records include schema context. Slow query entries now carry the schema name for SQL, logical plan, and PromQL slow-query paths. This makes it easier to find which tenant or workload produced a slow query when multiple schemas share a cluster.

USE greptime_private;

SELECT schema_name, cost, threshold, query, timestamp
FROM slow_queries
ORDER BY timestamp DESC
LIMIT 10;

Dashboard

  • Bundled Grafana metrics dashboards were reorganized for cluster and standalone deployments. The update fixes histogram bucket queries and counter-rate normalization, separates latency panels, and collapses flush/compaction sections to make troubleshooting easier.
  • The embedded GreptimeDB dashboard was updated to v0.13.6. This dashboard release refines metric views and fixes SQL execution from the editor when the cursor is after a SQL line.

πŸš€ Features​

πŸ› Bug Fixes​

⚑ Performance​

βš™οΈ Miscellaneous Tasks​

New Contributors​

All Contributors​

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

@discord9, @evenyag, @fengjiachun, @RitwijParmar, @shuiyisong, @sunchanglong, @v0y4g3r, @WenyXu

v1.1.1

Β· One min read

Release date: June 18, 2026

This release fixes a critical JSON compatibility bug that affects users upgrading from v1.0.x to v1.1.0, where legacy JSONB columns could return incorrect query results or fail during flush. It also removes a lock in the create flow procedure that could self-block sink table creation.

We strongly recommend users on v1.1.0 who use the JSON data type upgrade to v1.1.1.

πŸ› Bug Fixes​

  • fix: guard structured JSON alignment paths against legacy JSONB columns by @evenyag in #8323
  • fix: remove flow sink table lock by @discord9 in #8317

All Contributors​

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

@discord9, @evenyag

v1.1.0

Β· 16 min read

Release date: June 14, 2026

v1.1.0 adds online partitioning for previously unpartitioned tables, experimental incremental reads for batching flows, the experimental table semantic layer, and new CSV import options, along with performance and stability fixes.

warning

v1.1.0 contains a critical JSON compatibility bug that affects users upgrading from v1.0.x when using the JSON data type. We strongly recommend users on v1.1.0 who use the JSON data type upgrade to v1.1.1 or later.

πŸ‘ Highlights​

Partition an existing table. Previously only tables created with PARTITION ON COLUMNS could be repartitioned, via SPLIT PARTITION and MERGE PARTITION. v1.1.0 supports partitioning a table that has no partition rules, splitting its single region into multiple partitions with ALTER TABLE ... PARTITION ON COLUMNS:

ALTER TABLE sensor_readings PARTITION ON COLUMNS (device_id, area) (
device_id < 100 AND area < 'South',
device_id < 100 AND area >= 'South',
device_id >= 100 AND area <= 'East',
device_id >= 100 AND area > 'East'
);

The layout can then be adjusted further with SPLIT PARTITION and MERGE PARTITION. Repartitioning requires a distributed cluster with shared object storage and GC enabled.

Experimental incremental read for flows. Batching flows re-execute the full source query on every evaluation. With incremental read enabled, a flow only reads source rows appended since its last run, lowering overhead for large append-only sources. It is disabled by default; enable it in the flownode config:

[flow.batching_mode]
experimental_enable_incremental_read = true

It can also be set per flow with WITH (experimental_enable_incremental_read = 'true'). The source table must be append-only (append_mode = 'true'); otherwise the flow falls back to full-snapshot queries.

Table semantic layer. The experimental table semantic layer lets tables carry greptime.semantic.* metadata, such as signal type, source, metric type, unit, temporality, and ingestion pipeline. GreptimeDB stamps this metadata automatically on supported ingestion paths, and you can also set it manually with CREATE TABLE ... WITH (...). Consumers can query information_schema.table_semantics to understand what each table represents without guessing from table or column names.

MCP Server v0.5.0​

GreptimeDB MCP Server v0.5.0 uses table semantic metadata in describe_table, so AI assistants can understand metrics, logs, and traces more directly. It also expands the tool set for SQL, TQL, RANGE queries, pipelines, and dashboards, with stdio/SSE/Streamable HTTP transports, read-only defaults, masking, and audit logging.

Query performance improvements​

  • PromQL execution. Range functions such as rate and increase run faster, with benchmarks showing up to 97% lower execution time. Metric joins also improve through TSID-based joins and narrow binary join collection. Overall, compared to v1.0, v1.1 reduces average PromQL query time by 20% to 40%.
  • Scan pruning. Parquet prefiltering, prefilter-result caching, and remote dynamic filters on datanode scans reduce unnecessary row reads. The TSBS cpu-max-all-8 query was 4.5x faster with prefiltering.
  • Read efficiency. Page-index reads and range-cache reuse reduce storage reads for scan-heavy queries. Page-index reads reduced SST bytes fetched by 93.2% on one workload.

Dashboard​

  • The built-in Perses dashboard now supports trace visualization: a trace list and a per-trace detail/Gantt view from the trace table, using the GreptimeDB Perses data-source plugin.

CSV import options​

COPY FROM adds SKIP_BAD_RECORDS = 'true' for skipping invalid rows and HEADERS = 'false' for importing headerless CSV files:

COPY tbl FROM '/path/to/file.csv' WITH (
FORMAT = 'csv',
SKIP_BAD_RECORDS = 'true',
HEADERS = 'false'
);

Breaking changes​

πŸš€ Features​

πŸ› Bug Fixes​

🚜 Refactor​

πŸ“š Documentation​

⚑ Performance​

  • perf: optimize extrapolated rate op family by @waynexia in #7880
  • perf: join metrics tables on the tsid key whenever possible by @waynexia in #7927
  • perf(mito-codec): optimize SparseValues decode and lookup by @evenyag in #8057
  • perf(mito): split record batches on equal timestamps by @evenyag in #8163
  • perf: collect narrow binary join by @waynexia in #8193
  • perf: read primary key as binary if it overflows the dictionary by @evenyag in #8187
  • perf(mito): cached-size single-pass WAL entry encoder by @lyang24 in #8254

πŸ§ͺ Testing​

βš™οΈ Miscellaneous Tasks​

RFC​

New Contributors​

All Contributors​

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

@Copilot, @daviderli614, @Detachm, @discord9, @evenyag, @fengjiachun, @fengys1996, @killme2008, @kimjune01, @lyang24, @MichaelScofield, @onepizzateam, @QuakeWang, @rogierlommers, @shuiyisong, @sunng87, @v0y4g3r, @waynexia, @WenyXu, @yihong0618, @ZonaHex

v1.0.2

Β· 2 min read

Release date: May 14, 2026

This release fixes a bug where a query could return incorrect rows when all of the following were true:

  • the table uses merge mode (merge_mode);
  • the range result cache is enabled;
  • the query filters the time index column with OR (e.g. WHERE ts = a OR ts = b).

In this case the cache could reuse a previous query's result and return rows that should have been filtered out. This is now fixed. (#8105)

This release also improves performance for PromQL queries on tables whose time index uses a non-millisecond precision (e.g. Timestamp(ns) or Timestamp(us)). Previously the time-range filter could not be pushed down to storage in this case, so bounded PromQL queries fell back to scanning all SST files instead of pruning by time range. (#7926)

We recommend users on v1.0.0 and v1.0.1 upgrade to v1.0.2.

πŸš€ Features​

πŸ› Bug Fixes​

  • fix: window sort off by one precision TimeRange&better alias track by @discord9 in #8019
  • fix(server): describe EXPLAIN statements so bind parameters work by @BootstrapperSBL in #8035
  • fix: windows windowed sort ci by @discord9 in #8039
  • fix: batched prometheus ingest row metric by @v0y4g3r in #8054
  • fix: preserve case in database name from connection string by @v0y4g3r in #8062
  • fix(metric-engine): validate column types and require time index in verify_rows by @BootstrapperSBL in #8018
  • fix: type inference for sql rewrite by @sunng87 in #8052
  • fix: infer time index from column meta on derived table by @waynexia in #8013
  • fix(mito): ignore compaction override in enum option validation by @QuakeWang in #8094
  • fix(mito2): drop unsound time-filter cache-key stripping by @evenyag in #8105
  • fix: remap batch table route addresses by @WenyXu in #8109
  • fix: avoid stale route update during repartition allocation by @WenyXu in #8115

New Contributors​

All Contributors​

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

@BootstrapperSBL, @QuakeWang, @WenyXu, @discord9, @evenyag, @sunng87, @v0y4g3r, @waynexia