您的位置:首页 > 编程语言 > Java开发

重大更新!Druid 0.18.0 发布—Join登场,支持Java11

2020-04-27 15:39 1676 查看
![file](https://graph.baidu.com/resource/22268c03588bb54d4825b01587972667.png) Apache Druid本质就是一个分布式支持实时数据分析的数据存储系统。 能够快速的实现查询与数据分析,高可用,高扩展能力。 距离上一次更新刚过了二十多天,距离0.17版本刚过了三个多月,Druid再次迎来重大更新,Druid也越来越强大了。 Apache Druid 0.18.0 本次更新了 42位贡献者的200多个新功能,性能增强,BUG修复以及文档改进。 # 新功能 ### Join支持 Join是数据分析中的关键操作。在0.18.0之前,Druid支持一些与Join有关的功能,例如SQL中的Lookups或半联接。但是,这些功能的用例非常有限,对于其他联接用例,用户在摄取数据时必须对数据源进行规范化,而不是在查询时将其加入,这可能导致数据量激增和摄取时间延长。 Druid 0.18.0有史以来第一次支持真正的Join,Druid 目前支持INNER,LEFT和CROSS的join。对于原生查询,`join`作为新的数据源被引入,以表示两个数据源的Join。 当前,仅允许 *left-deep* join。这意味着左侧数据源仅允许一个`table`或另一个`join`数据源。对于右侧的数据源,`lookup`,`inline`,或者`query`数据源是允许的。 Druid SQL也支持Join了!其实本质上是SQL JOIN查询被转换为一个或几个包含原生查询。 Join会影响查询的性能,我们需要注意: - LOOKUP函数性能更好,`LOOKUP`如果适合需求,请考虑使用该功能。 - 在Druid SQL中使用Join时,请记住,它会生成未明确包含在查询中的子查询。 - 式子查询生成的一个常见原因是相等的两半的类型是否不匹配。例如,由于查找键始终是字符串,因此`druid.d JOIN lookup.l ON d.field = l.field`如果`d.field`为字符串,则性能最好。 - 从Druid 0.18.0开始,join运算符必须评估每一行的条件。将来,我们希望同时进行早期条件评估和延迟条件评估,并希望在常规情况下可以大大提高性能。 未来的工作: RIGHT OUTER 和 FULL OUTER JOIN 改善性能 ### 内联查询 Druid现在可以通过内联子查询来执行嵌套查询。任何类型的子查询都可以位于另一个类型的子查询之上,例如以下示例: ``` topN | (join datasource) / \ (table datasource) groupBy ``` 为了执行此查询,Broker首先评估groupBy子查询;它将子查询发送到数据节点并收集结果。收集的结果将在Broker存储中实现。Broker收集了groupBy查询的所有结果后,它将通过使用具有groupBy查询结果的内联数据源替换groupBy来重写topN查询。最后,将重写的查询发送到数据节点以执行topN查询。 ### 查询通道和优先级 当一次运行多个查询时,有时您可能希望根据查询的优先级来控制查询的资源分配。例如,可能希望限制分配给不太重要的查询的资源,以便重要的查询可以及时执行,而不会因为不太重要的查询而中断。 使用查询通道,就可以控制查询工作负载的利用率。具体设置如下: | Property | Description | Default | | ----------------------------------------------- | ------------------------------------------------------------ | --------- | | `druid.query.scheduler.numThreads` | Maximum number of HTTP threads to dedicate to query processing. To save HTTP thread capacity, this should be lower than `druid.server.http.numThreads`, but it is worth noting that like `druid.server.http.enableRequestLimit` is set that query requests over this limit will be denied instead of waiting in the Jetty HTTP request queue. | Unbounded | | `druid.query.scheduler.laning.strategy` | 通道策略 | `none` | | `druid.query.scheduler.prioritization.strategy` | 优先级策略 | `manual` | #### 查询指标的新维度 subQueryId 每个子查询具有不同`subQueryId`的,但有相同的 `queryId` #### 新配置 druid.server.http.maxSubqueryRows Broker内存中实现的最大行数 ### SQL分组 现在支持GROUPING SETS,允许您将多个GROUP BY子句组合为一个GROUP BY子句。 ### SQL动态参数 Druid现在支持SQL的动态参数。要使用动态参数,请用问号(`?`)字符替换查询中的所有文字。 # 重要变化 ### `applyLimitPushDownToSegments` 默认禁用 `applyLimitPushDownToSegments`已在0.17.0中添加,但是如果查询处理涉及许多段,则可能导致性能下降。这是因为“限制下推到分段扫描”会为每个分段初始化一个聚合缓冲区,其开销不可忽略。仅以后当查询涉及每个历史或实时任务的段数相对较少时,才启用此配置。 ### Kinesis的新滞后指标 Kinesis索引服务现在提供下面列出的新滞后指标: - `ingest/{supervisor type}/lag/time`:流中最新偏移量的总时间(以毫秒为单位) - `ingest/{supervisor type}/maxLag/time`:流的最新偏移量之后的最长时间(以毫秒为单位) - `ingest/{supervisor type}/avgLag/time`:流的最新偏移量之后的平均时间(以毫秒为单位) ### 默认Roaring bitmaps Druid 支持两种 bitmap, Roaring 和 CONCISE,由于性能原因,默认切换为 Roaring ### 数组表达式语法更改 Druid表达式现在支持用于创建数组的类型化构造函数。可以使用显式类型定义数组。例如,`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐