Skip to content

v1.2 GA, v1.3 Beta, Trace V2 & Native Histograms by Default | Greptime Monthly Report - No. 88

GreptimeDB v1.2.0 is GA, v1.2.1 fixes possible JSON2 data loss in manual compaction, and v1.3.0-beta.1 is out. Trace V2 stores OTLP span attributes in JSON2 columns, with Jaeger and Semantic Graph support. Native histogram ingestion from Remote Write v2 and OTLP is enabled by default.
v1.2 GA, v1.3 Beta, Trace V2 & Native Histograms by Default | Greptime Monthly Report - No. 88
On this page

Summary ​

September 2026 · 2026-09-01 – 2026-09-30

What landed this month:

  • GreptimeDB v1.2.0 is GA, v1.2.1 fixes possible JSON2 data loss in manual compaction, and v1.3.0-beta.1 is out.
  • Trace V2 stores OTLP span attributes in JSON2 columns, with Jaeger and Semantic Graph support.
  • Native histogram ingestion from Remote Write v2 and OTLP is enabled by default.

GreptimeDB v1.2.0 went GA on September 8, with the structured JSON2 type, Prometheus Remote Write v2 and Splunk HEC ingestion (release post). Before upgrading from v1.1, check three breaking changes: local COPY and external-table paths are restricted to the copy root in standalone and disabled in distributed deployments (migration guide); holt_winters is removed in favor of double_exponential_smoothing; and non-append tables using the early JSON2 type can fail during flush or compaction, so test them with representative data first.

v1.2.1 followed on September 16. On JSON2 tables, Parquet statistics could be read from the wrong column, so time-range queries could return wrong results and a manually triggered strict-window compaction (SWCS) could drop rows (db#9129). Automatic compaction is not affected. The release also fixes mixed JSON2 types during compaction (db#9135), wrong count(*) after repartition (db#9154), and PromQL rate windows across counter resets (db#9089). If you run v1.2.0 with JSON2 columns, upgrade.

v1.3.0-beta.1 shipped on September 29 with the Trace V2, native histogram and compaction changes below, plus an experimental series index that is not for production. Before trying it, check:

  • The query engine moves to DataFusion 55.1.0 (db#8555, db#9177). Integer-input median, approx_median and approx_percentile_cont return floats, REPLACE(s, '', replacement) returns s unchanged, and generated struct unnest column names change. Review views and Flow sinks with fixed result schemas.
  • JSON2 type hints no longer accept nullable or default; remove them from DDL and pipeline configs (db#9213).
  • Streaming Flow now accepts only single-source projection and filter queries (db#8976). CREATE FLOW rejects aggregations over source tables with ttl = 'instant', and joins without aggregation. Aggregations over persisted sources still run as batching Flow. Check existing flows of these shapes before upgrading.

Contributors ​

Over the past month, 24 contributors merged a total of 285 PRs. Among them, 11 community contributors contributed 18 PRs. Welcome to our new contributors: @Tyagiquamar, @DeviousCardi, @lczllx, @Minghan2005, @houyuwushang, @sainad2222, @immanuwell, @LiuQhahah!

Thanks to the community contributors who shipped this month:

Highlights ​

db#9192 feat(otlp): add trace v2 ingestion with JSON2 attributes ​

Trace V2 is an opt-in storage model for OTLP traces. The greptime_trace_v2 pipeline stores span, scope and resource attributes in three JSON2 columns instead of one column per attribute key. Select it with the x-greptime-pipeline-name: greptime_trace_v2 header on OTLP trace requests, write to a different table from your Trace V1 data, and query typed attributes by path:

sql
SELECT
    trace_id,
    span_attributes."http.status_code"::BIGINT AS http_status,
    resource_attributes."service.name"::STRING AS service_name
FROM traces_v2;

Jaeger queries and Semantic Graph derivation work on the new model (db#9257, db#9278), and span events and links are kept as JSON arrays (db#9232). Existing Trace V1 tables are not migrated. The JSON2 type is covered in the JSON2 deep dive.

db#9301 feat: enable native histogram ingestion by default ​

Ingestion of Prometheus Remote Write v2 native histograms and cumulative OTLP/HTTP exponential histograms is enabled by default, with no feature switch. Querying them was covered in August's report. For Prometheus, select Remote Write 2.0:

yaml
remote_write:
  - url: http://localhost:4000/v1/prometheus/write?db=public
    protobuf_message: io.prometheus.write.v2.Request

The experimental_enable_prometheus_native_histogram and experimental_enable_exponential_histogram options are removed and ignored, including when set to false. Remote Write v1 native histograms, native histogram Remote Read and OTel Arrow exponential histograms remain unsupported.

db#9165 feat: use exact sequence ranges for incremental Flow reads ​

Batching Flow can run more aggregations incrementally, processing only rows written since the last run instead of a full snapshot. On append-only source tables with the new preserve_row_sequence option (db#8865), Flow reads exactly the rows written after its checkpoint, including data that has already been flushed. In the sink, aggregate state columns from HLL, UDDSketch, stddev_state and avg_state are merged with the state already stored there (db#9168, db#9235).

EVAL OFFSET sets when a scheduled flow runs within its interval. EVAL INTERVAL '1 hour' EVAL OFFSET '17 minutes' runs at minute 17 of every hour (UTC), regardless of creation time or retries (db#8878).

db#9224 feat(query): implement PromQL @ modifier on vector and matrix selectors ​

PromQL now supports the @ modifier. Previously some_metric @ 300 parsed, but returned step-following values instead of the samples at the fixed timestamp. Absolute timestamps, @ start(), @ end() and @ combined with offset follow Prometheus semantics.

Other PromQL changes reduce query cost. Instant queries read only the last row of each series for second- and millisecond-precision time indexes (db#9034). Label matchers on one side of a binary operation or grouped join now filter the other side's scan (db#9202, db#9280). Range query responses are built batch by batch instead of holding the whole result in memory (db#9229), and response building skips an output sort and defers value formatting (db#9090, db#9091, db#9092).

Also this month ​

  • Object store WAL is in progress (RFC). With [wal] provider = "experimental_object_store", a standalone instance keeps its WAL on object storage (db#9386). It is experimental, standalone-only, and not included in v1.3.0-beta.1.
  • Compaction's multiway merge uses a tournament tree, which cuts comparisons when merging overlapping files. TWCS uses separate file-count thresholds for active and inactive time windows. compaction.twcs.trigger_file_num remains an alias for compaction.twcs.active_window.trigger_file_num (db#8989, db#9064, db#9011).
  • MySQL and PostgreSQL clients can authenticate with a bearer token: use * as the username and the token as the password. The user provider must support token validation (db#8899).
  • From the community: an HDFS object storage backend, type = "Hdfs", built on OpenDAL's native HDFS client (db#8701); ALTER TABLE ... SET 'skip_wal' = 'false' re-enables WAL on tables created with a Raft Engine or Kafka WAL (db#9130); CORS for gRPC-Web through [grpc] enable_cors (db#9374); and min_timestamp / max_timestamp in information_schema.region_statistics (db#9060).

Ecosystem Updates ​

Ingesters ​

Six ingesters added JSON2 writes this month: Go v0.7.5, Java v0.16.0, Rust v0.19.0, TypeScript v0.3.0, .NET v0.4.0 and Erlang v0.3.0. Upgrade notes:

  • Rust v0.19.0: TLS is opt-in. Enable the tls-ring feature to keep encrypted connections.
  • Java v0.16.0: gRPC 1.78 with keepalive on by default. Bulk write timeouts are bounded, and timed-out streams are cancelled.
  • .NET v0.4.0: JSON2 columns require GreptimeDB 1.2.1+ and are rejected by bulk writes. Write hints can be passed through the x-greptime-hints header.
  • Erlang v0.3.0: tables with JSON2 columns must be append-only. connect_timeout, request_timeout and health_check_timeout are configurable.

MCP Server ​

v0.6.0 requires MCP Python SDK 2.x; stay on v0.5.2 if you depend on the v1 FastMCP API. New search_table_semantics and query_semantic_graph tools let an agent find tables by observability concept and read the service dependency graph. The semantic graph features require GreptimeDB 1.3.

Dashboard ​

v0.13.15, bundled with v1.3.0-beta.1, adds a per-column toggle to hide null fields in JSON results and fixes metric query input overflow.

Helm Charts ​

greptimedb-cluster 0.8.35 moves to GreptimeDB v1.2.0. greptimedb-cluster 0.8.36 and greptimedb-standalone 0.4.15 move to v1.2.1.

Good First Issues ​

This issue is scoped for a first contribution. Comment on it to pick it up.

Issue#7603 Support WITH (timeout/wait) for DDL statements ​

Only ALTER TABLE repartition accepts WITH (timeout = '...', wait = ...) today. The issue is split into per-statement subtasks, such as CREATE TABLE, DROP TABLE, CREATE FLOW and TRUNCATE TABLE, and each one can be picked up separately.

Keywords: SQL, DDL

Difficulty: Medium

Get Involved ​

Open an issue for bugs and feature requests, or drop into the community channel.

Stay in the loop

Join our community