暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Range 查询中支持表达式、分布式 EXPLAIN ANALYZE | Greptime 双周精选

GreptimeDB 2024-05-22
126
 

内容概述


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

最近的内容更新如下:

Tips

按照惯例,我们将和大家分享 GreptimeDB v0.8 版本升级的细节和架构思考,所以本次更新将有视频号直播。
了解更多功能细节、观看 demo 演示,或是直接提问我们的核心工程师,欢迎参与本周四(5 月 23 日)晚 19:00 的直播。
📹 点击下方直播链接立即预约我们的直播哦~ 





社区贡献者名单


在过去的两周里,GreptimeDB 共合并了 86 个 PR,其中有 8 位独立贡献者,累计 12 个 PR 被成功合并,还有很多待合并的 PR。


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

@CookiePieWw (db#3932)

@etolbakov  (db#3924)

@groobyming(promqlparser#84)

@irenjj (docs#946 docs#940 db#3910)

@ltratt (promqlparser#87)

@SergeTupchiy (ingester-erl#40)

@taobo (db#3901 db#3923 db#3995)

@tizee (db#3751)

注:按照 GitHub 用户名首字母顺序排列
👏 欢迎 @groobyming @ltratt @tizee 作为新的贡献者加入社区并成功合并了首个 PR,还有更多来自其他独立贡献者的 PR 正在等待合并。


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



PR 亮点


#3823

在 Range Query 中使用表达式
现在在 Range Query 中支持:
  • 在  Range 和 Align 参数中支持 Interval 类型的计算:比如使用 (INTERVAL '2' day - INTERVAL '1' day)
  • 通过表达式指定查询对齐到的时间原点:比如 (now() - INTERVAL '1' hour) 指定了查询对齐到当前查询时间的一个小时之前。

SELECT 
    ts, 
    min(val) RANGE (INTERVAL '2' day - INTERVAL '1' day
FROM 
    host 
ALIGN (INTERVAL '2' day - INTERVAL '1' day)
    TO (now() - INTERVAL '1' hour
ORDER BY ts;


上述改进可以帮助用户更灵活地定义和控制时间范围,以满足特定的查询需求。

🌟 Range Query 是 GreptimeDB 的扩展语法,更多信息:

https://docs.greptime.com/reference/sql/range

#3908
支持 EXPLAIN ANALYZE 语句分析分布式查询性能

EXPLAIN ANALYZE 会执行对应的 SQL 语句。通过运行 EXPLAIN ANALYZE,用户可以详细了解分布式查询的性能,包括执行时间和资源利用率等指标。这个功能对于在分布式环境中优化和排查复杂查询至关重要。

explain analyze SELECT count(*) FROM system_metrics;

+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| stage | node | plan                                                                                                                                                                            |
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
0     | 0    |  MergeScanExec: peers=[4402341478400(10250), ] metrics=[output_rows: 1, greptime_exec_read_cost: 0, ready_time: 6352264, finish_time: 7509279, first_consume_time: 7165836, ] |
|       |      |                                                                                                                                                                                 |
1     | 0    |  AggregateExec: mode=Final, gby=[], aggr=[COUNT(greptime.public.system_metrics.ts)] metrics=[output_rows: 1, elapsed_compute: 108029, ]                                         |
|       |      |   CoalescePartitionsExec metrics=[output_rows: 32, elapsed_compute: 83055, ]                                                                                                    |
|       |      |     AggregateExec: mode=Partial, gby=[], aggr=[COUNT(greptime.public.system_metrics.ts)] metrics=[output_rows: 32, elapsed_compute: 334913, ]                                   |
|       |      |       RepartitionExec: partitioning=RoundRobinBatch(32), input_partitions=1 metrics=[repart_time: 1, fetch_time: 441565, send_time: 30325, ]                                    |
|       |      |         StreamScanAdapter { stream: "<SendableRecordBatchStream>" } metrics=[output_rows: 3, mem_used: 24, ]                                                                    |
|       |      |                                                                                                                                                                                 |
|       |      | Total rows: 1                                                                                                                                                                   |
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+


#3923

迁移依赖 orc-rs 至 datafusion-orc 
早些时候,我们将 orc-rs 捐赠至了 datafusion-contrib 社区(https://github.com/datafusion-contrib)并与社区一同维护。最近主仓库的 orc-rs (https://github.com/wenyxu/orc-rs) 依赖从迁移至了 datafusion-orc (https://github.com/datafusion-contrib/datafusion-orc)。
#3932
模糊测试校验已插入数据
在之前的工作中,我们为数据写入增加了模糊测试。在这个 PR 中,我们进一步增加了对已写入数据的校验,以确保写入的数据符合预期。




邀请大家来做 GreptimeDB 的 Good First Issue 啦!💜

#3997 为使用共享存储的 GreptimeDB 集群运行模糊测试

关键词:CI

难度:中等

在 db#3967 中,我们在 CI 中运行 GreptimeDB 集群并运行模糊测试(Fuzz test)。为了进一步贴近真实使用场景,我们希望在 CI 中为使用共享存储的 GreptimeDB 集群也运行模糊测试。

#3973 为列类型变更的特性增加对应的模糊测试

关键词:模糊测试

难度:中等

在 db#3517 中我们支持了列的数据类型变更,我们需要为特性增加对应的模糊测试。

#3884 移除 query crate 中不必要的 traits 和 wrapper 类型

关键词:重构

难度:简单

大多数实现只是将请求转发到 Datafusion。由于我们与 Datafusion 高度耦合,并且没有计划支持另一个查询引擎,所以我们可以删除这些类型。



 



点击下方链接🔗关注 GreptimeDB,了解更多技术干货👇



关于 Greptime

Greptime 格睿科技专注于为物联网(如智慧能源、智能汽车等)及可观测等产生大量时序数据的领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前主要有以下三款产品:


GreptimeDB 是一款用 Rust 语言编写的开源时序数据库,具有云原生、无限水平扩展、高性能和融合分析等特点,帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。我们提供 GreptimeDB 企业版,支持更多企业特性和定制化服务,如有需要欢迎联系我们:15310923206(同微信)。


GreptimeCloud 是一款全托管的云上数据库即服务(DBaaS)解决方案,基于开源时序数据库 GreptimeDB 打造,能够高效支持可观测、物联网、金融等领域的应用。用户可以通过内置的可观测性解决方案 GreptimeAI 全面掌握 LLM 应用的成本、性能、流量和安全等情况


车云一体解决方案 是一款深入车企实际业务场景的时序数据库解决方案,解决了企业车辆数据呈几何倍数增长后的实际业务痛点。多模态车端数据库结合云端 GreptimeDB 企业版帮助车企极大降低流量、计算和存储成本,并帮助提升数据实时性和业务洞察能力。


GreptimeDB 作为开源项目,欢迎对时序数据库、Rust 语言等内容感兴趣的同学们参与贡献和讨论。第一次参与项目的同学推荐先从带有 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/


点击下方链接🔗关注 GreptimeDB,了解更多技术干货👇


往期精彩文章:


👇 点击下方阅读原文,立即体验 GreptimeDB!

文章转载自GreptimeDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论