欢迎参与 8 月 1 日中午 11 点的线上分享,了解 GreptimeDB 联合处理指标和日志的最新方案! 👉🏻 点击加入

Skip to content
On this page
双周报
2023-8-16

Greptime 双周精选 (7.31-8.13)|支持 Interval 类型

在过去的两周,GreptimeDB 依旧非常活跃,在带来新功能的同时,也和社区的贡献者们一起推动 GreptimeDB 成为一个更好的产品,再次感谢大家!

内容概述

作为一个成长中的开源项目,GreptimeDB 的进展离不开来自全球的社区贡献者们,感谢各位!

过去两周,我们所有项目中共有 119 个 PR 被合并,以下是这段时间较为重要的 PR 总结:

  • 即使表不存在,也支持接受不带时间戳的 InfluxDB 请求

  • 数据库内支持了 Interval 类型,同时 gRPC 通信层也对该类型进行了支持

  • 单机模式下支持 Truncate Table

  • 支持重写 RangeSelect Logical Plan

社区贡献者名单

在过去的两周里,共有 11 位贡献者,累计 20 个 PR 被成功合并,还有很多待合并的 PR。

祝贺以下各位在过去 2 周内成为我们活跃的贡献者:

👏 欢迎 @gongzhengyang@quakewang 作为新的贡献者加入到我们的社区,并都成功合并了首个 PR!

同时衷心感谢我们所有的成员和贡献者!是你们的付出让我们的项目得以成功,也是你们让 GreptimeDB 成为一个更优质的产品。让我们一起努力,建立一个更棒的社区!

PR 亮点

db#2041 即使表不存在,也支持不带时间戳的 InfluxDB 请求

原来,当相应的表存在时,我们可以执行以下命令,但当相应的表不存在时,我们无法执行该命令:

rust
curl -i -XPOST "http://localhost:4000/v1/influxdb/write?db=public&precision=ms" \
--data-binary \
'monitor,host=127.0.0.1 cpu=0.1,memory=0.4'

现在我们支持了 GreptimeDB 在相应表不存在的情况下接受不带时间戳的 InfluxDB 请求。

db#2064 数据库内支持了 Interval 类型,同时 gRPC 通信层也对该类型进行了支持

db#1952 中,我们:

  • 在 common_time 包中实现了 Interval 类型

  • 为 IntervalMonthDayNano 实现了 DataType, Vector, Value 特性

同时我们修复了 db#1886 中的 bug。现在,我们实现了基本的 Interval 类型,并且在 gRPC 通信层也支持了对应类型。

db#2090 单机模式下支持 Truncate Table

现在我们在单机模式下支持了 Truncate Table 的存储过程、重置版本和 Truncate region,其中包括:

  • 获取 RegionWriter

  • 创建 RegionMetaAction::Truncate 来存储 committed_sequence,并将其持久化,以便从 manifest 中恢复

  • 将 WAL 中的所有数据标记为 obsolete

  • 将所有 SST 标记为已删除

  • 重置版本

我们还支持从 RegionMetaAction::Truncate 恢复,包括:

  • 将所有 SST 标记为已删除

  • 重置版本,并将来自 RegionMetaAction::Truncatecommitted_sequence 设置为版本的 flushed_sequence

db#2058 支持重写 RangeSelect Logical plan

我们现在在 GreptimeDB 中支持 RangeSelect,包括:

  • 将 sqlparser 更改为可解析范围选择语法的新版本

  • 使用新版 sqlparser 实现的 Into trait,将 sqlparser 结构转换为 datafusion 的 sqlparser 结构,因此我们仍可使用 datafusion 分析逻辑计划

实现 Logical plan rewriter 包括:

  • 递归跟踪 Logical plan tree,使用标量 UDF 函数 range_fn 查找投影计划

  • 收集 range_fn 中的所有参数,生成 RangeSelect 计划

  • 将 RangeSelect 计划插入 Logical plan tree

  • 完成 Logical plan 的重写

注意:如果 Logical plan tree 中没有找到使用标量 UDF 函数 range_fn 的投影计划,则不会重新生成任何计划,Logical plan rewriter 的成本很低,而且是递归的,因此可以支持任意嵌套的范围选择。

RangeSelect 计划的唯一要求是输入模式必须包含数据类型为 Timestamp 的时间索引列,如果没有给出 by 关键字,默认 by 将是表的行键。

新鲜事

新增官方 js-sdk

我们已经发布了 greptime-js-sdk,它基于 typescript 开发,封装了常用的 SQL 建表、插入和查询语句,同时也封装了 PromQL 查询。后续我们会继续完善对不同协议和语法的支持,并不断完善文档,进一步降低使用 GreptimeDB 的上手难度。

关于 Greptime

Greptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 GreptimeDB 已经衍生出多款适合不同用户的解决方案,更多信息或 demo 展示请联系下方小助手(微信号:greptime)。

欢迎对开源感兴趣的朋友们参与贡献和讨论,从带有 good first issue 标签的 issue 开始你的开源之旅吧~期待在开源社群里遇见你!添加小助手微信即可加入“技术交流群”与志同道合的朋友们面对面交流哦~

Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb

官网:https://greptime.cn/

文档:https://docs.greptime.cn/

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

LinkedIn: https://www.linkedin.com/company/greptime/

加入我们的社区

获取 Greptime 最新更新,并与其他用户讨论。