@Greptime: GreptimeDB v1.2.0-beta.1 发布。205 项更改,259 次提交,22 位贡献者。重点内容:JSON2 作为数据类型,P…

X AI KOLs Following 产品

摘要

GreptimeDB v1.2.0-beta.1 已发布,主要特性包括:JSON2 作为结构化列类型、支持原生直方图的 Prometheus Remote Write v2、字典编码的序列键以加快查询速度,以及其他加固和破坏性更改。

GreptimeDB v1.2.0-beta.1 已发布。205 项更改,259 次提交,22 位贡献者。 重点内容:JSON2 作为数据类型、支持原生直方图的 Prometheus Remote Write v2,以及 Splunk HEC 数据摄取。 Beta 版其余内容:字典编码的序列键(在 200+ 查询测试集上端到端提升约 24%),以及一个 Parquet 元数据缓存——之前需要 1 GB 上限,现在 64 MB 即可运行。 4 项破坏性更改,请先在测试环境验证。 https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release…
查看原文
查看缓存全文

缓存时间: 2026/08/04 14:11

GreptimeDB v1.2.0-beta.1 已发布。205 项变更,259 个提交,22 位贡献者。重点内容:JSON2 作为数据类型、支持原生直方图的 Prometheus Remote Write v2、以及 Splunk HEC 数据接入。Beta 版的其他内容:字典编码的序列键(在 200+ 查询测试集上端到端提升约 24%),以及原本需要 1 GB 限制、现在 64 MB 即可运行的 parquet 元数据缓存。包含 4 项破坏性变更,请先在测试环境验证。https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release…


GreptimeDB v1.2.0-beta.1:JSON2 列与 Prometheus Remote Write v2

来源:https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release

我们于 2026 年 7 月 31 日发布了 GreptimeDB v1.2.0-beta.1。这是 v1.2.0 的第一个 beta 版本,包含 4 项破坏性变更,因此请先在测试环境中评估。此版本的主要变更:

  • 支持 Prometheus Remote Write v2 协议和原生直方图
  • JSON2 作为数据类型首次亮相;GA 将随 v1.2.0 稳定版一起发布
  • 查询性能:字典编码的序列键带来约 24% 的端到端提升,RangeSelect 投影剪枝减少了扫描的列数
  • 一轮权限和文件访问加固,包括 SQL 本地文件沙箱(这是一项破坏性变更)
  • 新增 Splunk HEC 数据接入;集群 DDL 和运维事件现写入系统表

开发统计(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#development-stats)

  • 本发布说明涵盖 205 项变更
  • 从 v1.1.0 到 v1.2.0-beta.1,22 位贡献者提交了 259 个 commit
  • 其中 6 位是首次为 GreptimeDB 贡献:@agrawalx、@raphaelroshan、@srivtx、@yimeng、@divyansh-1009、@RitwijParmar

GreptimeDB 从 v1.1.0 到 v1.2.0-beta.1 的贡献者

主要变更(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#main-changes)

Prometheus Remote Write v2 与原生直方图(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#prometheus-remote-write-v2-and-native-histograms)

GreptimeDB 现在支持 Prometheus Remote Write v2 协议。原生直方图可以在写入校验后持久化,PromQL 也增加了相应的原生直方图函数。Prometheus 端的 protobuf_message 默认是 v1 的 prometheus.WriteRequest,因此仅把 URL 指向 GreptimeDB 仍然发送的是 v1。需要显式设置 v2 消息格式:

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

配置完成后,v2 样本数据即可写入。GreptimeDB 端的原生直方图数据接入仍处于实验阶段,默认关闭;需在 frontend 配置中启用:

[http]
experimental_enable_prometheus_native_histogram = true

JSON2 首次亮相(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#json2-debuts)

JSON2 是本版本新增的数据类型。它以结构化的列式布局存储 JSON,而不是将每个文档序列化为 JSON 字符串或 JSONB 值。采用这种布局后,查询嵌套 JSON 与查询普通列一样快,语法也更简单:不再需要 json_get_int 等 UDF,直接用 . 即可访问字段。

CREATE TABLE json2_table (
    ts TIMESTAMP TIME INDEX,
    my_json JSON2
) WITH ('append_mode' = 'true');

SELECT my_json.field_a.field_b::INT64 FROM json2_table;

本版本还确定了 JSON2 在嵌套路径上的读取行为:当某个字段在某行中是标量、在另一行中是对象时,该字段仍能解析。写入路径上有两条限制:JSON2 列在创建表时要求 append_mode='true',且 CREATE TABLE 和 ALTER TABLE 都会对此进行校验。顶层不是对象(数组、字符串、数字、布尔值、null)的 JSON 值会被拒绝。

v1.2.0-beta.1 是 beta 版本,JSON2 将在 v1.2.0 稳定版中 GA。目前它非常适合测试环境,我们欢迎你的反馈。我们将另发一篇文章详细介绍 JSON2。

性能(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#performance)

内存中的主键列现在使用字典数组,降低了序列键展开的开销。在 200+ 查询的测试集上,端到端提升约 24%。同时修正了字典编码列上的正则过滤语义,并恢复了其快速路径。

SELECT * FROM metrics WHERE job = 'node' AND path ~ '/api/.*';
-- 字典编码列上的正则过滤现在既正确又走快速路径

范围查询现在会在 RangeSelect 计划之前修剪未使用的输入列,从而减少扫描的列数和 I/O。parquet 元数据缓存也变得更轻量:它丢弃了从不使用的列元数据,并增加了一层压缩。此前元数据缓存需要 1 GB 上限,现在 64 MB 就足够了,且没有缓存抖动。

这些数字来自相应 PR 中的测试场景,并不代表所有工作负载。

另外还有三项优化未附带具体数字:OTLP trace 数据接入热路径得到优化,默认的 otlp.trace_ingest_chunk_size 从 128 提高到 512;Prometheus remote read 结果转换改为复用字典编码的标签字符串,而不是逐行拷贝;compaction picker 改为异步运行,不再阻塞 region worker 循环。

Splunk HEC 数据接入(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#splunk-hec-ingestion)

GreptimeDB 现在提供与 Splunk HTTP Event Collector 兼容的端点。现有的 Splunk 采集管道(Vector 的 splunk_hec sink、OTel Collector 的 splunk_hec exporter、Fluent Bit)只需更换 URL 和 token 即可将日志写入 GreptimeDB:

POST /v1/splunk/services/collector/event   # JSON 事件
POST /v1/splunk/services/collector/raw     # 纯文本,一行一个事件
GET  /v1/splunk/services/collector/health  # 健康检查

字段映射规则如下:time 映射到时间戳,host/source/sourcetype 以及 fields 下的键映射到标签列,event 和其余键作为数据,index 决定表名。请求默认经过 greptime_identity 管道,会扁平化嵌套的 event 对象;可通过 pipeline_name 查询参数或 x-greptime-pipeline-name 请求头覆盖。raw 端点会将每行原样存储在 message 列中,并从查询参数获取元数据。请求体支持 gzip 压缩。

集群 DDL 与运维事件写入系统表(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#cluster-ddl-and-operational-events-in-a-system-table)

事件记录器本次记录的更多了。除了已有的 region 迁移事件外,数据库、表、flow 和 view 上的 DDL,以及 repartition、WAL prune 和 bulk GC 也作为事件写入系统表。要回答“这张表是什么时候创建、修改或删除的”不再需要翻日志。记录范围和保留时间都可配置:

[event_recorder]
ttl = "90d"  # 事件表的 TTL,默认 90 天
event_types = ["create_table", "drop_table"]  # 省略则记录全部,[] 则关闭

权限与文件访问加固(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#permission-and-file-access-hardening)

本版本在多个方面加强了权限和文件访问控制,其中一项是破坏性变更:

  • SQL 对本地文件的访问被沙箱化;见文末兼容性说明
  • 查询和写入协议全面强制表级权限,数据库 ACL 检查中的漏洞已修复,受限 HTTP 端点也已纳入权限检查
  • 无效的密码设置现在会直接失败,而不再静默通过
  • PostgreSQL 支持 SCRAM-SHA-256 认证,静态用户文件新增 pg_scram_sha256 密码格式
  • 创建数据库的用户自动获得该数据库的访问权限

还有一个相关的部署选项。主 HTTP 端口(默认 4000)同时提供运维端点,如 /metrics、/status 和 /debug/prof/*,因此你现在可以启动第二个端口,只允许 /v1 和 /dashboard,其他请求一律返回 404:

[http]
enable_api_server = true
api_server_addr = "127.0.0.1:4006"

这样 4006 面向外部,4000 保留在内网。该功能默认关闭,两个端口共享其余 [http] 配置。

Export/Import V2:并行与断点续传(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#export-import-v2-parallelism-and-resumption)

基于快照的 Export/Import V2 新增了并发 chunk 导出(--chunk-parallelism)、并行导入任务(--task-parallelism)和进度输出(--progress)。它还支持断点续传:重复运行同一命令会跳过已完成的分块和任务,无需从头再来。

greptime cli data export-v2 create \
  --addr 127.0.0.1:4000 \
  --to file:///tmp/greptime-snapshots/demo \
  --chunk-parallelism 4
# 重复运行同一命令可从已有进度继续

完整用法见 Export/Import V2 文档(https://docs.greptime.com/user-guide/deployments-administration/disaster-recovery/export-import-v2)。

其他改进(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#other-improvements)

  • 流式 EXPLAIN ANALYZE:POST /v1/sql/analyze/stream 在查询运行期间报告各阶段指标,无需等待整个分布式查询结束。http.experimental_enable_explain_analyze_stream 默认开启
  • 手动 compaction 支持指定时间范围。start_time 和 end_time 必须同时出现,区间为半开区间 [start_time, end_time),不带时区的时间戳按会话时区解释:
ADMIN COMPACT_TABLE('t', 'regular', 'parallelism=2,start_time=2026-01-01T00:00:00Z,end_time=2026-02-01T00:00:00Z');
  • auto_flush_interval 现在是表级选项,可在建表时设置,也可用 ALTER TABLE SET 修改,不再是一个全局统一的频率
  • 新增 MySQL 对象存储后端。暂不支持 repartition:OpenDAL 的 MySQL service 没有原生 copy,因此 repartition 触发的 region 文件复制会返回 Unsupported
  • Dashboard 更新至 v0.13.10,最值得注意的是自包含的 dashboard 快照,可以只读方式打开,无需查询实时数据源

值得注意的修复(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#notable-fixes)

有三个修复值得对照你自己的工作负载检查:

  • PromQL 有三类 bug 会产生错误或缺失的结果:普通 NaN 样本被丢弃,or 匹配错误处理缺失标签和空操作数,以及查询对齐的范围尾部被截断
  • MySQL 协议对无法表示的时间戳返回错误,而不是返回错误数据
  • 在 metric engine 中,逻辑投影索引经过校验,路由裁剪使用物理分区类型,缺失路由列不再 panic

兼容性说明(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#compatibility-notes)

SQL 本地文件访问被沙箱化(#8708)(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#sql-local-file-access-is-sandboxed-8708)

当 COPY FROM/TO、COPY DATABASE 和 file engine 外部表访问本地文件时,路径现在被限制在沙箱目录内,默认是 /copy:相对路径在沙箱内解析,绝对路径仅在位于沙箱内部时才会被接受。新的 storage.copy_root 设置可将沙箱指向专用的本地目录;会暴露 GreptimeDB 内部数据、WAL、manifest 或配置目录的取值会被拒绝。在分布式部署中,SQL 对 Datanode 本地文件的访问被禁用。对象存储路径(S3/OSS/GCS/AzBlob)不受影响。

升级前:检查 COPY 工作流和引用沙箱外本地路径的外部表,然后将文件移入沙箱,设置 storage.copy_root,或改用对象存储。

holt_winters 移除,fill 修饰符被拒绝(#8457)(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#holt-winters-removed-fill-modifiers-rejected-8457)

promql-parser 已升级至 v0.10.0,已废弃的 holt_winters 兼容垫片被移除。fill、fill_left 和 fill_right 修饰符在其所需的外连接语义实现之前会被直接拒绝,以避免产生静默错误的查询计划。

升级前:检查你的 PromQL 查询和告警规则是否仍在使用 holt_winters 或这些 fill 修饰符。

sparse_primary_key_encoding 设置移除(#8470)(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#sparse-primary-key-encoding-setting-removed-8470)

metric engine 现在始终使用稀疏编码,sparse_primary_key_encoding 设置已退役。现有配置文件中保留该设置不会报错,你可以在方便的时候清理。

管道整数窄化检查(#8589)(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#pipeline-integer-narrowing-checks-8589)

当管道转换将整数转换为更窄的声明类型时,现在会先进行范围检查。超出范围的值不再静默回绕(之前 -1 转 uint8 得到 255,256 转 int8 得到 0);而是遵循配置的 on_failure 策略:忽略、使用默认值或直接报错。窄化的数字字符串遵循相同的范围规则。

升级前:如果某个管道依赖回绕行为,请调整输入数据或 on_failure 设置。

结语(https://greptime.com/blogs/2026-08-04-greptimedb-v1-2-0-beta-1-release#closing)

如果你符合以下任一情况,这个版本值得测试:你通过 Prometheus 生态写入并对原生直方图有需求;你大规模接入 JSON 日志;你的序列基数很高且对查询性能敏感;或者你需要跨实例迁移和定期备份。这是一个 beta 版本,请先在测试环境中验证,并逐条检查上面 4 项破坏性变更后再升级。

完整变更列表见 GitHub Release(https://github.com/GreptimeTeam/greptimedb/releases/tag/v1.2.0-beta.1)。

感谢本周期内的 22 位贡献者。其中 6 位是首次贡献:

  • @agrawalx(https://github.com/agrawalx)构建了 Splunk HEC 数据接入
  • @raphaelroshan(https://github.com/raphaelroshan)新增了表级 auto_flush_interval,并修复了连接字符串脱敏和字面量取反 panic
  • @srivtx(https://github.com/srivtx)新增了 ALTER TABLE SET auto_flush_interval
  • @yimeng(https://github.com/yimeng)让 PostgreSQL 接受不带引号的 intervalstyle
  • @divyansh-1009(https://github.com/divyansh-1009)让时间戳显示精度跟随列 schema
  • @RitwijParmar(https://github.com/RitwijParmar)让 Prometheus 标签发现改为流式读取 catalog 表,而不是逐个按名称查找

这些能力在 v1.2.0 稳定版发布前会持续改进,我们欢迎你在测试中提交 bug 报告。

相似文章

@Greptime: GreptimeDB v1.1.2 已发布 — 这是一个值得升级的 v1.1 补丁。主要修复:定时 Flows 现在绑定 now()/current_timest…

X AI KOLs Following

GreptimeDB v1.1.2 是一个补丁版本,修复了定时 Flows 中 now() 的绑定问题,以确保 EVAL INTERVAL 窗口的确定性。此外还修复了以下问题:Kafka SASL 密码在调试输出中的屏蔽、GC 索引文件列表、parquet 元数据缓存大小、Prometheus 标签发现扫描以及 PromQL 时间二元聚合。建议用户升级。