@Greptime: GreptimeDB v1.2.0-beta.1 发布。205 项更改,259 次提交,22 位贡献者。重点内容:JSON2 作为数据类型,P…
摘要
GreptimeDB v1.2.0-beta.1 已发布,主要特性包括:JSON2 作为结构化列类型、支持原生直方图的 Prometheus Remote Write v2、字典编码的序列键以加快查询速度,以及其他加固和破坏性更改。
查看缓存全文
缓存时间: 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: Greptime 月度更新第87期:Prometheus原生直方图现已在GreptimeDB中实现端到端支持:可通过远程写入v…
GreptimeDB 2026年8月月度更新引入了对Prometheus原生直方图的端到端支持、基于OTLP追踪的服务依赖图(实验性),以及v1.2.0-beta.2版本中的破坏性变更。
@Greptime:更多生产部署正在重塑 GreptimeDB 的路线图。我们正投入更多精力于稳定性、性能、安全……
本文回顾了 GreptimeDB 2026 路线图的年中进展,重点介绍了已发布的功能,如在线重新分区和 JSON2 类型,并解释了由于生产部署导致的优先级变化。
@Greptime: GreptimeDB v1.3.0-alpha.1 — PromQL 原生直方图,wide: 选择,rate()/delta(),向量操作符,聚合,…
GreptimeDB v1.3.0-alpha.1 引入了 PromQL 原生直方图和向量操作符,以增强可观测性,并新增了对 OTLP traces 和 RISC-V 64 构建的支持。
@Greptime: GreptimeDB v1.1.2 已发布 — 这是一个值得升级的 v1.1 补丁。主要修复:定时 Flows 现在绑定 now()/current_timest…
GreptimeDB v1.1.2 是一个补丁版本,修复了定时 Flows 中 now() 的绑定问题,以确保 EVAL INTERVAL 窗口的确定性。此外还修复了以下问题:Kafka SASL 密码在调试输出中的屏蔽、GC 索引文件列表、parquet 元数据缓存大小、Prometheus 标签发现扫描以及 PromQL 时间二元聚合。建议用户升级。
@Greptime: JSON2 已在 GreptimeDB v1.2.0 中发布。何时应使用它而非 JSON?JSON 与 JSON2:下方有视觉指南。JSON2 仍在测试版中。
JSON2 是 GreptimeDB v1.2.0 中的一种新型 JSON 类型,专为日志和半结构化数据的高效存储和查询设计,采用列式优化。目前处于测试版,支持仅追加表。