重大更新!Druid 0.18.0 发布—Join登场,支持Java11
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表达式现在支持用于创建数组的类型化构造函数。可以使用显式类型定义数组。例如,<LONG>[1, 2, null]
创建的阵列LONG
型含1
,2
,和null
。请注意,您仍然可以创建没有显式类型的数组。例如,[1, 2, null]
仍然是创建等效数组的有效语法。在这种情况下,Druid将根据其元素推断数组的类型。此新语法也适用于空数组。<STRING>[]
,<DOUBLE>[]
以及<LONG>[]
将创建的空数组STRING
,DOUBLE
和LONG
类型。
自定义Transform
为开发人员公开了transform的扩展接口 详情:https://druid.apache.org/docs/0.18.0/development/modules.html#writing-your-own-extensions
chunkPeriod
已删除
chunkPeriod
从0.14.0开始不推荐使用,因为它的用法有限,现在,此查询已从0.18.0中删除。
支持Java 11
Druid现在支持Java11。您可以使用Java 11运行与Java 8相同的Druid二进制包。我们在Travis上进行的测试包括:
- 使用Java 11编译和运行单元测试
- 使用Java 8进行编译并使用Java 11运行集成测试
从Java 9开始,当发现某些库使用反射非法访问JDK的内部API时,它将发出警告。这些警告将通过在以后的版本中修改Druid代码或升级库版本来解决。目前,可以通过添加JVM选项(例如--add-opens
或)来抑制这些警告--add-exports
。
2020-01-22T21:30:08,893 WARN [main] org.apache.druid.java.util.metrics.AllocationMetricCollectors - Cannot initialize org.apache.druid.java.util.metrics.AllocationMetricCollector
java.lang.reflect.InaccessibleObjectException: Unable to make public long[] com.sun.management.internal.HotSpotThreadImpl.getThreadAllocatedBytes(long[]) accessible: module jdk.management does not "exports com.sun.management.internal" to unnamed module @6955cb39
可以通过添加禁止显示此警告--add-exports java.base/jdk.internal.perf=ALL-UNNAMED
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
可以通过添加禁止显示此警告--add-opens java.base/java.lang=ALL-UNNAMED
2020-01-22T21:30:08,902 WARN [main] org.apache.druid.java.util.metrics.JvmMonitor - Cannot initialize GC counters. If running JDK11 and above, add --add-exports java.base/jdk.internal.perf=ALL-UNNAMED to the JVM arguments to enable GC counters.
可以通过添加禁止显示此警告--add-exports java.base/jdk.internal.perf=ALL-UNNAMED
将Kafka客户端更新到2.2.2
Kafka客户端库已更新至2.2.2
Bug修复
德鲁伊0.18.0包括40个错误修复。有关错误修复的完整列表,请参见https://github.com/apache/druid/pulls?page=1&q=is%3Apr+milestone%3A0.18.0+is%3Aclosed+label%3ABug
- 修复superbatch合并最后一个分区边界(#9448)
- 在流索引中重用转换器(#9625)
- 保留压缩后的数值类型尺寸的空值(#9622)
- DruidInputSource可以在重新摄取期间添加新尺寸(#9590)
- 价值计数器溢出错误,而不是写入错误的段(#9559)
- 修复了带有空值的数字列上的过滤器的一些问题(#9251)
- 在UTC时区之外修复timestamp_format expr(#9282)
- 设置带有时区的segmentGranularity(#8690)时,KIS任务失败
- 通过提取Fn,表达式,联接等的限制下推来解决分组问题(#9662)
重大更新!Druid 0.18.0 发布—Join登场,支持Java11的更多相关文章
- Redis 3.0正式版发布,正式支持Redis集群
Redis是一个开源.基于C语言.基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API.近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了.Redis 3.0的最 ...
- [ReferenceError: __insane_exports is not defined] [monaco-editor@0.18.0] [vue] [typescript]
npm install monaco-editor@ 安装上面的命令,安装0.17.0版本.
- 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分
为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构.由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入.同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交P ...
- MySQL8.0 新特性 Hash Join
概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜.有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQ ...
- Centos7 安装mysql-8.0.18(rpm)
1.前言 当前MySQL最新版本:8.0.18 (听说比5.7快2倍)官方之前表示:MySQL 8.0 正式版 8.0.18 已发布,MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量 ...
- SlickEdit 18.0 版本发布 同时更新破解文件
18.0版本没有太大的惊喜 多了如下功能 Multiple Document Group Interface Repository Log Browser History Diff Support f ...
- RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)
最新版本请转到:RDIFramework.NET平台代码生成器V3.1版本全新发布-更新于2016-10-08(提供下载) RDIFramework.NET代码生成器V3.0版本修改了针对3.0版本的 ...
- Bootstrap v4.0.0-alpha.5 发布,大量更新
Bootstrap v4.0.0-alpha.5 发布了,Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的 ...
- mysql 8.0.18 hash join测试(内外网首文)
CREATE TABLE COLUMNS_hj as select * from information_schema.`COLUMNS`; INSERT INTO COLUMNS_hj SELECT ...
随机推荐
- Python中矩阵的完全显示问题以及输出矩阵中的非零元问题
问题:有时需要查看矩阵的所有元素,但矩阵过大时中间部分会用[... ...]号代替,这样不方便数据分析. 解决: # 解决不完全显示问题 import numpy as np np.set_print ...
- 使用python-crontab给linxu设置定时任务
安装pip install python-crontab #coding=utf-8 from crontab import CronTab #创建类 class Crontabi(object): ...
- A 现代艺术
时间限制 : - MS 空间限制 : 165536 KB 评测说明 : 1s 问题描述 何老板是一个现代派的艺术家.他在一块由n*n的方格构成的画布上作画.一开始,所有格子里的数字都是0.何老板 ...
- My背包九讲——01背包
文章目录 背包问题中的常用变量说明 题目 解题思路 我想要想理解最简单 01背包就是要`理解
- markdown多张图片并排显示
在markdown中,目前,让图片像这样并排居中的方式主要是两种: ![](https://img2018.cnblogs.com/blog/1735896/202001/1735896-202001 ...
- Linux 定时实行一次任务命令
当我们想在指定的时间自动执行 一次 任务的时候,可以使用at命令 启动服务 使用时首先检查atq的服务是否启动 service atd status # 检查atd的状态 service atd st ...
- IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频
IDEA 2020.1 经过了漫长的打磨终于发布正式版了,而这次的版本不止直接支持 Java 14,还带来了两个重量级的功能,官方中文版支持和 JDK 直接下载. 在之前的开发中,当我们需要下载 JD ...
- 适用于小白的 python 快速入门教程
文章更新于:2020-02-17 按照惯例,需要的文件附上链接放在文首 文件名:python-3.7.6-amd64.exe 文件大小:25.6 M 下载链接:https://www.lanzous. ...
- 面向对象核心技术(java)
一.类的封装详解 在“面向对象编程基础(java)”的时候讲过,封装是面向对象编程的核心思想.同时我们也知道类是载体,只不过我们把对象的属性和行为封装在载体中. 现我们用封装的方式来实现,一个顾客去一 ...
- Linux网络基础,路由的追踪
一.traceroute traceroute [-46ndFT] [-f<存活数值>] [-g<网关>] [-i(--interface)<device>] [- ...