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的更多相关文章

  1. Redis 3.0正式版发布,正式支持Redis集群

    Redis是一个开源.基于C语言.基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API.近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了.Redis 3.0的最 ...

  2. [ReferenceError: __insane_exports is not defined] [monaco-editor@0.18.0] [vue] [typescript]

    npm install monaco-editor@ 安装上面的命令,安装0.17.0版本.

  3. 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

    为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构.由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入.同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交P ...

  4. MySQL8.0 新特性 Hash Join

    概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜.有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQ ...

  5. 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 倍,还带来了大量 ...

  6. SlickEdit 18.0 版本发布 同时更新破解文件

    18.0版本没有太大的惊喜 多了如下功能 Multiple Document Group Interface Repository Log Browser History Diff Support f ...

  7. RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)

    最新版本请转到:RDIFramework.NET平台代码生成器V3.1版本全新发布-更新于2016-10-08(提供下载) RDIFramework.NET代码生成器V3.0版本修改了针对3.0版本的 ...

  8. Bootstrap v4.0.0-alpha.5 发布,大量更新

    Bootstrap v4.0.0-alpha.5 发布了,Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的 ...

  9. mysql 8.0.18 hash join测试(内外网首文)

    CREATE TABLE COLUMNS_hj as select * from information_schema.`COLUMNS`; INSERT INTO COLUMNS_hj SELECT ...

随机推荐

  1. 上传到码云时遇到:Incorrect username or password ( access token )

    由于之前上传到 码云时候使用命令:git push -u origin master时出现如下bug Incorrect username or password ( access token ) 时 ...

  2. 7.Maven命令

    在eclipse中运行maven 一.首先要对pom.xml文件右键→Run As→Maven build 二.输入Maven命令 三.常见的Maven命令有: [1]clean 清理 [2]comp ...

  3. [noip模拟]计蒜姬<BFS>

    Description 兔纸们有一个计蒜姬,奇怪的是,这个计蒜姬只有一个寄存器X.兔纸们每次可以把寄存器中的数字取出,进行如下四种运算的一种后,将结果放回寄存器中.1.X=X+X2.X=X-X3.X= ...

  4. [codevs2597]团伙<并查集>

    题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友 ...

  5. 谈谈flex布局实现水平垂直居中

    我们在这要谈的是用flex布局来实现水平和垂直居中.随着移动互联网的发展,对于网页布局来说要求越来越高,而传统的布局方案对于实现特殊布局非常不方便,比如垂直居中.所以09年,W3C 提出了一种新的方案 ...

  6. QCustomPlot图形和图例同步方法

    QCustomPlot图形和图例同步前言 我现在有几条折线,折线和图例一一对应,不管点击图例或者折线,相关的都高亮 QCustomPlot图形和图例同步方法 // 链接信号槽 m_plot即为QCus ...

  7. 如何基于layui的laytpl实现数据绑定

    想了半天才想起自己园子的登录密码.可想而知,多长时间没登录了 正文一开始用layui做了几个管理系统,所以用起来觉得确实很容易上手,管理后台最常用的就是form和table以及弹窗类.layui提供的 ...

  8. 第一次将本地项目push到github

    问题:github有一个空项目,将本地项目上传到github空项目时,报错如下 $ git push --set-upstream git@github.com:dslu7733/promise.gi ...

  9. VUE一款适用于pc平台的简单toast

    新项目要求用typescript+vue+elementui的模式来搭建pc项目,最初踩了好多坑.产品说提示不想用element-ui的提示. 打算用toast的形式.所以就自己写了一个pc的toas ...

  10. 存储机制 cookie session jwt token

    cookieCookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网 ...