Apache Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统。它既支持高速的数据实时摄入处理,也支持实时且灵活的多维数据分析查询。因此 Druid 最常用的场景就是大数据背景下、灵活快速的多维 OLAP 分析。
另外,Druid 还有一个关键的特点:它支持根据时间戳对数据进行预聚合摄入和聚合分析,因此也有用户经常在有时序数据处理分析的场景中用到它。
目前 Apache Druid 24.0.0 发布了,此版本包含来自 67 个贡献者的 300 多个新功能、错误修复、性能增强、文档改进和额外的测试。以下是部分新功能:
多阶段查询任务引擎
Apache Druid 的基于 SQL 的摄取(ingestion)使用分布式多阶段查询架构,其中包括一个称名为多阶段查询任务引擎(MSQ 任务引擎)的查询引擎。 MSQ 任务引擎扩展了 Druid 的查询功能,因此可以编写引用外部数据的查询以及使用 SQL INSERT 和 REPLACE 执行摄取。
从 Druid 24.0.0 开始,使用多阶段查询任务引擎的基于 SQL 的摄取是最推荐的解决方案,同时也仍支持替代摄取解决方案,例如本机批处理和基于 Hadoop 的摄取系统。
参考:
#12524
#12386
#12523
#12589
嵌套列
Druid 现在支持将嵌套数据结构直接存储在新添加的 COMPLEX<json> 列类型中。 COMPLEX<json> 列以 JSON 格式存储结构化数据的副本,以及用于嵌套文字值(STRING、LONG 和 DOUBLE 类型)的专用内部列和索引。
参考:
#12753
#12714
#12753
#12920
更新 Java 支持
完全支持 Java 11 ,Java 17 支持得到改进。
#12839
查询引擎更新
更新了列索引和过滤器的查询处理
重新设计的列索引非常灵活,允许对各种索引类型进行建模。添加了构建使用更新索引的过滤器的机制,同时还允许其他列实现实现内置索引类型以提供适配器,以在 Druid 提供的当前集合过滤器中使用索引。
#12388
时间过滤运算符
现在可以使用 Druid SQL 运算符 TIME_IN_INTERVAL 根据时间过滤查询结果。优先使用 TIME_IN_INTERVAL 而不是 SQL BETWEEN 运算符以按时间过滤。详细信息请参阅日期和时间函数。
#12662
Null 值和“in”过滤器
如果values
数组包含null
,则“in”过滤器匹配空值。与不匹配空值的 SQL IN 过滤器不同。
有关详细信息,请参阅 询过滤器和 SQL 数据类型。
#12863
搜索查询中的虚拟列
以前,搜索查询只能搜索数据源中存在的维度,现在支持将虚拟列作为查询中的参数。
#12720
在 __time 上优化简单的 MIN / MAX SQL 查询
像现在这样的简单查询select max(__time) from ds
作为timeBoundary
查询运行,以利用段中的时间维度排序。可以设置功能标志来启用此功能。
#12472
#12491
字符串聚合结果
第一个/最后一个字符串聚合器现在仅根据值进行比较。以前,第一个/最后一个字符串聚合器的值首先根据_time
列进行比较,然后再根据值进行比较。
如果有现有查询并希望继续使用_time
列和值,请更新查询,以使用 ORDER BY MAX(timeCol)。
#12773
Jackson 序列化
引入并实现了新的辅助函数JacksonUtils
以实现 SerializerProvider
对象的重用。
此外,默认情况下禁用了对 GroupByQueryToolChest
基于映射的行的向后兼容性 ,这消除了复制重量级ObjectMapper
. 引入了一个配置选项,允许管理员显式启用向后兼容性。
#12468
更新了 IPAddress Java 库
添加了一个新的 IPAddress Java 库依赖项来处理 IP 地址,该库包括 IPv6 支持,此外迁移了 IPv4 函数以使用新库。
#11634
其他还包括大量性能改进,这是一个大型版本,更多详情请查看更新公告。