v1.1.0
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.
👍 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
rateandincreaserun 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-8query 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
- fix!: align gRPC CLI option names with config naming by @QuakeWang in #8021
- refactor(mito2)!: remove PartitionTreeMemtable by @evenyag in #8080
- fix!: correct information_schema index metadata by @killme2008 in #8275
- fix!: fence scoped flow repair snapshots by @discord9 in #8277
🚀 Features
- feat: tune constants by @waynexia in #7851
- feat: execution timeout for prepared statement by @sunng87 in #7932
- feat: add parquet nested leaf projection by @fengys1996 in #7900
- feat: use partition range cache in scan by @evenyag in #7873
- feat: allow customizing trace table partitions by @sunng87 in #7944
- feat(cli): implement import-v2 data import pipeline by @fengjiachun in #7898
- feat: implement trace type whitelist by @shuiyisong in #7930
- feat: introducing "JSON2" type by @MichaelScofield in #7965
- feat: update dashboard to v0.12.1 by @ZonaHex in #7969
- feat: add more range check and test for parsing postgres parameters by @sunng87 in #7962
- feat(flow): inc query scan bind seq by @discord9 in #7879
- feat: json2 insert by @MichaelScofield in #7981
- feat(mito2): add PK-range-aware TWCS overlap handling by @v0y4g3r in #7954
- feat: prune bulk memtable parts by first tag by @evenyag in #7911
- feat: expose flownode addrs in information_schema flows by @QuakeWang in #7992
- feat: update dashboard to v0.12.2 by @ZonaHex in #8010
- feat: json2 flush by @MichaelScofield in #8011
- feat(cli): add metadata put key and table commands by @WenyXu in #7989
- feat(cli): add retry and import state foundations by @fengjiachun in #8007
- feat: tune range cache by @evenyag in #8006
- feat: support gRPC-Web on frontend gRPC server by @onepizzateam in #8027
- feat: add seq watermark in record batch metrics by @discord9 in #8015
- feat(flow): parse defer on miss src table by @discord9 in #7980
- feat: allow detailed index config in pipeline by @QuakeWang in #8036
- feat(meta): add dropped table tombstone metadata helpers by @v0y4g3r in #8040
- feat: add read column abstraction by @fengys1996 in #8038
- feat: support prefiltering any columns in flat format by @evenyag in #7972
- feat: persist our column_id to parquet field_id by @sunng87 in #8032
- feat: json expr planner by @MichaelScofield in #8066
- feat(operator): allow last_row merge mode with append mode by @v0y4g3r in #8065
- feat: support nested projection in mito2 read path by @fengys1996 in #7959
- feat: support env vars in heartbeat by @v0y4g3r in #8064
- feat: concretize json type from query by @MichaelScofield in #8081
- feat: flow inc query terminal metrics transport by @discord9 in #8045
- feat: import resume part2 by @fengjiachun in #8070
- feat: add export-v2 snapshot listing by @fengjiachun in #8096
- feat: some optimistic paths for instant manipulate by @waynexia in #7812
- feat: remote dyn filter basics by @discord9 in #7979
- feat: bump datafusion to 53 by @waynexia in #8107
- feat: start environments in parallel by @waynexia in #8101
- feat: expose node info for placement selectors by @v0y4g3r in #8095
- feat: add otlp to prometheus naming translation options by @shuiyisong in #8113
- feat: add export-v2 snapshot verification by @fengjiachun in #8111
- feat: add InfluxDB default merge mode config by @v0y4g3r in #8134
- feat: show sst primary key range in information_schema by @MichaelScofield in #8137
- feat(meta-srv): add selector factory plugin hook by @v0y4g3r in #8140
- feat: use and cache page index from sst meta by @waynexia in #8139
- feat: inc query join rewrite helper by @discord9 in #8108
- feat: compact json2 data by @MichaelScofield in #8103
- feat: merge files to add in one region edit by @MichaelScofield in #8141
- feat: implement a cache for the prefilter by @evenyag in #8102
- feat: update some interceptor to carry more information by @sunng87 in #8090
- feat(cli): add export-v2 delete command by @fengjiachun in #8162
- feat: initial implementation for range cache with time filters by @evenyag in #8130
- feat: add flow query-context plumbing for terminal watermarks by @discord9 in #8154
- feat: support alter table partition syntax by @WenyXu in #8177
- feat: update project status and architecture by @killme2008 in #8182
- feat(meta-srv): support repartition for unpartitioned tables by @WenyXu in #8186
- feat(flow): support incremental read checkpoints by @discord9 in #8179
- feat: support pending flow metadata with defer_on_missing_source by @discord9 in #8124
- feat: global switch for creating tables automatically by @killme2008 in #8203
- feat: table semantic layer identity (Phase 1) by @killme2008 in #8210
- feat: check open region requirements by @WenyXu in #8194
- feat(datanode): hold query permit for stream and expose limiter timeout by @evenyag in #8215
- feat: validate batching flow sink schema on create by @discord9 in #8176
- feat: support CSV copy skip bad records by @QuakeWang in #8198
- feat: look up cache with range calculation by @waynexia in #8123
- feat: join simplifier for promql binary op by @waynexia in #8211
- feat: support headerless CSV copy from by @QuakeWang in #8233
- feat: add remote dynamic filter frontend registration by @discord9 in #8148
- feat: table semantic layer per-table enrichment (Phase 2) by @killme2008 in #8218
- feat: table semantic layer information_schema view (Phase 3) by @killme2008 in #8240
- feat: identify noneffective binary modifiers by @waynexia in #8230
- feat: introduce plugin setup functions with richer context by @sunng87 in #8256
- feat: pgwire 0.40 by @sunng87 in #8257
- feat: fan out remote dynamic filter updates from FE by @discord9 in #8241
- feat: add information_schema statistics table by @killme2008 in #8253
- feat: add tools for development by @evenyag in #8260
- feat: separate datanode query and ingestion runtimes by @v0y4g3r in #8246
- feat: support remote WAL logical pruning by @WenyXu in #8259
- feat: decouple region edit and compaction by @MichaelScofield in #8272
- feat(cli): add export import progress abstraction by @fengjiachun in #8270
- feat: apply remote dynamic filters on datanode scans by @discord9 in #8262
- feat: json2 field access pushdown to parquet by @MichaelScofield in #8267
- feat: pass snapshot read bounds over flight by @discord9 in #8279
- feat(security): add password verifier formats by @killme2008 in #8251
- feat: flush hook extension point by @sunng87 in #8145
- feat: add field_id for internal fields by @sunng87 in #8284
- feat(cli): add import-v2 progress mode by @fengjiachun in #8283
- feat: support repartition with target partition columns by @WenyXu in #8278
- feat(cli): add import-v2 progress UI by @fengjiachun in #8289
- feat: support create region requirements by @WenyXu in #8281
- feat: add per-partition timings to merge scan partition metrics by @evenyag in #8293
- feat: add password hash generation command by @killme2008 in #8288
🐛 Bug Fixes
- fix: nested projection missing roots by @fengys1996 in #7993
- fix: make sure interceptor is called for plan execution by @sunng87 in #8041
- fix: win cli lock by @fengjiachun in #8049
- fix(mito): queue writes during region edit by @v0y4g3r in #8079
- fix: revoke meta kv writes outside metasrv leader by @QuakeWang in #8060
- fix: remove unparsed [heartbeat] sections from node example configs by @kimjune01 in #8092
- fix(mito2): schema-safe inverted index pruning by @fengys1996 in #8089
- fix: add standalone flag in standalone tests by @shuiyisong in #8100
- fix: expose flight timestamp range metadata by @v0y4g3r in #8104
- fix: stabilize ssts sqlness datetime redaction by @fengjiachun in #8110
- fix(mito): allow compaction publish during editing by @v0y4g3r in #8097
- fix: classify WAL prune Kafka retry errors by @WenyXu in #8119
- fix: optimize sorted run picking by @v0y4g3r in #8128
- fix: flaky sqlness result ordering by @fengys1996 in #8136
- fix: skip flush when closing follower region by @v0y4g3r in #8143
- fix: track INSERT SELECT in process manager by @QuakeWang in #8138
- fix: skip sst cache preload for staging manifest by @WenyXu in #8147
- fix(mysql): infer LIMIT placeholders in prepare by @discord9 in #8149
- fix: reject physical metric table writes by @WenyXu in #8153
- fix(mysql): keep unknown prepare placeholders by @discord9 in #8150
- fix: close heartbeat streams on metasrv leader stepdown by @WenyXu in #8156
- fix: qualify HistogramFold schema by @evenyag in #8157
- fix: faster jieba by @yihong0618 in #8158
- fix(mito2): schema-safe skipping index pruning by @fengys1996 in #8122
- fix: update RPC bind address in README by @rogierlommers in #8168
- fix: divide series for subquery output by @evenyag in #8173
- fix: reset procedure manager state on stop by @WenyXu in #8174
- fix(mito): count owned SSTs in region stats by @WenyXu in #8191
- fix: classify InsertInto as write request by @waynexia in #8200
- fix(flow): harden incremental read correctness by @discord9 in #8196
- fix: nightly jsonbench test by @MichaelScofield in #8212
- fix: format detected IPv6 grpc address by @WenyXu in #8221
- fix: run eval-interval flow without time window by @discord9 in #8231
- fix: align bulk insert schema handling by @v0y4g3r in #8222
- fix: improve remote WAL replay checkpoint handling by @WenyXu in #8225
- fix: avoid stale metadata cache after invalidation by @WenyXu in #8235
- fix: reset region detector after migration by @WenyXu in #8234
- fix: accept JSONB OTLP logs against existing schema by @v0y4g3r in #8250
- fix(flow): support complex SQL full-query flows by @discord9 in #8242
- fix(config): align scan memory limit default with code by @fengjiachun in #8228
- fix(ci): retry repartition chaos row validation by @WenyXu in #8271
- fix: pin tonic below 0.14.5 to avoid max connection age panic (#8265) by @evenyag in #8287
- fix(mito): collect index apply metrics in pruner verbose mode by @evenyag in #8290
🚜 Refactor
- refactor(mito2): remove dead scan code by @evenyag in #7925
- refactor: introduce the ProjectInput structure by @fengys1996 in #7908
- refactor(mito): remove
Compactor::compactmethod by @v0y4g3r in #7968 - refactor(mito2): remove PrimaryKey variants by @evenyag in #7982
- refactor: update SqlPlan for more cleaner variants by @sunng87 in #7966
- refactor: unify frontend discovery with active peer discovery by @WenyXu in #8031
- refactor(mito2): reshape extension range API by @evenyag in #8004
- refactor: make InsertForwarder use shared metasrv database operator by @WenyXu in #8033
- refactor: make
json_getadapted with JSON2 by @MichaelScofield in #8043 - refactor: propagate flush reasons through FlushRegions path by @QuakeWang in #8051
- refactor: extract functions for building mysql/pg's kvbackend and electionref by @shuiyisong in #8076
- refactor: store the schema of flat source by @MichaelScofield in #8091
- refactor: remove async file reader adapter layer by @waynexia in #8120
- refactor: use node info for active discovery by @WenyXu in #8121
- refactor: clarify region flush reasons by @WenyXu in #8146
- refactor: use structured pusher key by @WenyXu in #8155
- refactor: split repartition region descriptors by @WenyXu in #8172
- refactor: use last compaction scheduled time instead of finished time by @MichaelScofield in #8190
- refactor: optimize compaction's pick time by @MichaelScofield in #8197
- refactor: give instance to start plugin functions by @sunng87 in #8208
- refactor(cli): split export-v2 verify into plan/scan/reconcile by @fengjiachun in #8206
- refactor: streamline pipeline ingestion row building by @shuiyisong in #8236
- refactor: loki ingestion by @shuiyisong in #8266
- refactor(cli): stream export-v2 verify data listing by @fengjiachun in #8268
- refactor: skip prefilter for expr with functions by @MichaelScofield in #8280
📚 Documentation
- docs: rfc for remote dyn filter by @discord9 in #7931
- docs: update project status by @killme2008 in #7976
⚡ 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
- test: add repartition chaos target by @WenyXu in #7924
- test(cli): harden import state lock test by @fengjiachun in #8030
- test: use standalone flag in test by @shuiyisong in #8068
- test: cover standalone user provider config by @Detachm in #8067
- test: verify KILL cancels INSERT SELECT by @QuakeWang in #8151
- test: add jsonbench tests by @MichaelScofield in #8165
- test: fuzz unpartitioned repartition by @WenyXu in #8195
- test: move CSV skip bad records coverage to integration by @WenyXu in #8237
- test: add rebuild index coverage by @discord9 in #8175
- test: redact dynamic filter in order_by sqlness by @discord9 in #8286
⚙️ Miscellaneous Tasks
- chore: move Tantivy fulltext search to blocking thread pool by @lyang24 in #7919
- ci: add standalone workflows for bumping helm charts and homebrew by @evenyag in #7941
- chore: add build info in panic message by @v0y4g3r in #8000
- chore: update the opendal to 0.56 rc2 by @shuiyisong in #8003
- chore: sqlness redact datetime by @discord9 in #8058
- chore: add trait for creating meta kvbackend in standalone by @shuiyisong in #8063
- chore: update opendal's version to official 0.56 by @shuiyisong in #8069
- chore: wrap standalone runtime with trait by @shuiyisong in #8083
- chore: update dashboard by @WenyXu in #8098
- chore: update dashboards by @WenyXu in #8106
- chore: use opendal main branch by @shuiyisong in #8118
- chore: bump version to v1.1.0 by @evenyag in #8131
- chore: pub some functions by @MichaelScofield in #8133
- chore: introduce user cache invalidation api by @shuiyisong in #8129
- ci: add PostgreSQL and MySQL dependency setup steps to sqlness job by @Copilot in #8185
- chore: add
LeaderServicesContextcontrol to standalone by @shuiyisong in #8164 - chore: expose region info inspection table by @v0y4g3r in #8178
- ci: add nightly jsonbench test by @MichaelScofield in #7750
- chore: update opendal to 0.57 by @shuiyisong in #8204
- chore: update vrl to 0.33 by @shuiyisong in #8219
- chore: remove
HttpConfiguratorby @shuiyisong in #8224 - ci: update arm64 runner by @daviderli614 in #8226
- chore: align OTLP logs with existing table schemas by @shuiyisong in #8229
- ci: revert arm64 runner default to 4xlarge by @evenyag in #8243
- chore: remove auth in flownode by @shuiyisong in #8244
- chore: add repartition debug logs by @WenyXu in #8245
- chore: Increase GreptimeDB cluster setup timeout for distributed fuzz CI by @Copilot in #8263
- ci: notify jsonbench result by @MichaelScofield in #8273
- chore: load page index in opener by @evenyag in #8269
RFC
- RFC: Table Semantic Layer by @killme2008 in #8199
New Contributors
- @QuakeWang made their first contribution in #8233
- @rogierlommers made their first contribution in #8168
- @kimjune01 made their first contribution in #8092
- @Detachm made their first contribution in #8067
- @onepizzateam made their first contribution in #8027
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