druid查询
查询是发送HTTP请求到,Broker, Historical或者Realtime节点。查询的JSON表达和每种节点类型公开相同的查询接口。
Queries are made using an HTTP REST style request to a Broker, Historical, or Realtime node. The query is expressed in JSON and each of these node types expose the same REST query interface.
We start by describing an example query with additional comments that mention possible variations. Query operators are also summarized in a table below.
Example Query "rand"
Here is the query in the examples/rand subproject (file is query.body), followed by a commented version of the same.
{
"queryType":
"groupBy",
"dataSource":
"randSeq",
"granularity": "all",
"dimensions": [],
"aggregations": [
{ "type":
"count", "name": "rows" },
{ "type":
"doubleSum", "fieldName": "events",
"name": "e" },
{ "type":
"doubleSum", "fieldName": "outColumn",
"name": "randomNumberSum" }
],
"postAggregations":
[{
"type":
"arithmetic",
"name":
"avg_random",
"fn":
"/",
"fields": [
{ "type":
"fieldAccess", "fieldName": "randomNumberSum"
},
{ "type":
"fieldAccess", "fieldName": "rows" }
]
}],
"intervals":
["2012-10-01T00:00/2020-01-01T00"]
}
This query could be
submitted via curl like so (assuming the query object is in a file
"query.json").
curl -X POST "http://host:port/druid/v2/?pretty"
-H 'content-type: application/json' -d @query.json
The
"pretty" query parameter gets the results formatted a bit nicer.
Details of Example Query "rand"
The queryType JSON
field identifies which kind of query operator is to be used, in this case it is
groupBy, the most frequently used kind (which corresponds to an internal
implementation class GroupByQuery registered as "groupBy"), and it
has a set of required fields that are also part of this query. The queryType
can also be "search" or "timeBoundary" which have similar
or different required fields summarized below:
{
"queryType":
"groupBy",
The dataSource JSON
field shown next identifies where to apply the query. In this case, randSeq
corresponds to the examples/rand/rand_realtime.spec file schema:
"dataSource": "randSeq",
The granularity JSON
field specifies the bucket size for values. It could be a built-in time
interval like "second", "minute",
"fifteen_minute", "thirty_minute", "hour" or
"day". It can also be an expression like {"type":
"period", "period":"PT6m"} meaning "6 minute
buckets". See Granularities
for more information on the different options for this field. In this example,
it is set to the special value "all" which means bucket all data points
together into the same time bucket
"granularity": "all",
The dimensions JSON
field value is an array of zero or more fields as defined in the dataSource
spec file or defined in the input records and carried forward. These are used
to constrain the grouping. If empty, then one value per time granularity bucket
is requested in the groupBy:
"dimensions": [],
A groupBy also
requires the JSON field "aggregations" (See Aggregations), which
are applied to the column specified by fieldName and the output of the
aggregation will be named according to the value in the "name" field:
"aggregations": [
{ "type":
"count", "name": "rows" },
{ "type":
"doubleSum", "fieldName": "events",
"name": "e" },
{ "type":
"doubleSum", "fieldName": "outColumn", "name":
"randomNumberSum" }
],
You can also specify
postAggregations, which are applied after data has been aggregated for the
current granularity and dimensions bucket. See Post Aggregations
for a detailed description. In the rand example, an arithmetic type operation
(division, as specified by "fn") is performed with the result
"name" of "avg_random". The "fields" field
specifies the inputs from the aggregation stage to this expression. Note that
identifiers corresponding to "name" JSON field inside the type
"fieldAccess" are required but not used outside this expression, so
they are prefixed with "dummy" for clarity:
"postAggregations": [{
"type":
"arithmetic",
"name":
"avg_random",
"fn":
"/",
"fields": [
{ "type":
"fieldAccess", "fieldName": "randomNumberSum"
},
{ "type":
"fieldAccess", "fieldName": "rows" }
]
}],
The time range(s) of
the query; data outside the specified intervals will not be used; this example
specifies from October 1, 2012 until January 1, 2020:
"intervals":
["2012-10-01T00:00/2020-01-01T00"]
}
Query Operators
The following table
summarizes query properties.
Properties shared by
all query types
|
property |
description |
required? |
|
dataSource |
query is applied to |
yes |
|
intervals |
range of time |
yes |
|
context |
This is a key-value |
no |
|
query type |
property |
description |
required? |
|
timeseries, topN, |
filter |
Specifies the |
no |
|
timeseries, topN, |
granularity |
the timestamp |
no |
|
timeseries, topN, |
aggregations |
aggregations that |
yes |
|
timeseries, topN, |
postAggregations |
aggregations of |
yes |
|
groupBy |
dimensions |
constrains the |
yes |
|
search |
limit |
maximum number of |
no |
|
search |
searchDimensions |
Dimensions to apply |
no |
|
search |
query |
The query portion |
yes |
Query Context
|
property |
default |
description |
|
timeout |
0 (no timeout) |
Query timeout in |
|
priority |
0 |
Query Priority. |
|
queryId |
auto-generated |
Unique identifier |
|
useCache |
true |
Flag indicating |
|
populateCache |
true |
Flag indicating |
|
bySegment |
false |
Return "by |
|
finalize |
true |
Flag indicating |
Query Cancellation
Queries can be
cancelled explicitely using their unique identifier. If the query identifier is
set at the time of query, or is otherwise known, the following endpoint can be
used on the broker or router to cancel the query.
DELETE
/druid/v2/{queryId}
For example, if the
query ID is abc123, the query can be cancelled as follows:
curl -X DELETE "http://host:port/druid/v2/abc123"
druid查询的更多相关文章
- Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?
开心一刻 昨晚跟我妈语音 妈:我年纪有点大了,想抱孩子了 我:妈,我都多大了,你还想抱我? 妈:我想抱小孩,谁乐意抱你呀! 我:刚好小区有人想找月嫂,要不我帮你联系下? 妈:你给我滚 然后她直接把语音 ...
- 【转载】DRuid 大数据分析之查询
转载自http://yangyangmyself.iteye.com/blog/2321759 1.Druid 查询概述 上一节完成数据导入后,接下来讲讲Druid如何查询及统计分析导入的数据 ...
- Druid.io系列(五):查询过程
原文链接: https://blog.csdn.net/njpjsoftdev/article/details/52956194 Druid使用JSON over HTTP 作为底层的查询语言,不过强 ...
- Druid 0.17入门(4)—— 数据查询方式大全
本文介绍Druid查询数据的方式,首先我们保证数据已经成功载入. Druid查询基于HTTP,Druid提供了查询视图,并对结果进行了格式化. Druid提供了三种查询方式,SQL,原生JSON,CU ...
- Druid学习之查询语法
写在前面 最近一段时间都在做druid实时数据查询的工作,本文简单将官网上的英文文档加上自己的理解翻译成中文,同时将自己遇到的问题及解决方法list下,防止遗忘. 本文的demo示例均来源于官网. D ...
- 快速了解Druid——实时大数据分析软件
Druid 是什么 Druid 单词来源于西方古罗马的神话人物,中文常常翻译成德鲁伊. 本问介绍的Druid 是一个分布式的支持实时分析的数据存储系统(Data Store).美国广告技术公司Met ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- [转帖]OLAP引擎这么多,为什么苏宁选择用Druid?
OLAP引擎这么多,为什么苏宁选择用Druid? 原创 51CTO 2018-12-21 11:24:12 [51CTO.com原创稿件]随着公司业务增长迅速,数据量越来越大,数据的种类也越来越丰富, ...
随机推荐
- HA高可用集群
准备2台机器:主:master:192.168.254.140从:slave:192.168.254.141 1.主上安装:wget www.lishiming.net/data/attachmen ...
- CLR查找和加载程序集的方式
C#开发者在开发WinForm程序.Asp.Net Web(MVC)程序等,不可避免的在项目中引用许多第三方的DLL程序集, 编译后引用的dll都放在根目录下.以我个人作品 AutoProject S ...
- 关于报错:AttributeError: module 'turtle' has no attribute 'setup' 问题
对于我们菜鸟,往往安装软件后,都容易使用默认设置,结果将写的文件保存到了安装目录下. 这样造成了很大得隐患,如果写得文件,名称与安装目录下得系统文件名称重复,就容易出现以上报错. 解决方法:1.将文件 ...
- checkSelfPermission 找不到 Android 动态权限问题
checkSelfPermission 找不到 Android 动态权限问题 最近写了一个Demo,以前好好地.后来手机更新了新系统以后,不能用总是闪退.而且我的小伙伴的是android 7.0系统 ...
- CentOS7搭建Confluence Wiki
前言 在艾佳生活实习时,有三款团队协作系统特别喜欢:Wiki.Jira和Jenkins.对于Jenkins的搭建,之前<自动部署工具Jenkins>有过记录.这次,搭建一个Wiki,作为知 ...
- 任何一款IDE的设计思路
我们以Windows操作系统为例.现在,基于操作系统的任何计算机语言,我们说都是高级语言,从C开始.无论是哪一种,都是通过操作系统的API与计算机交互.即便.Net的FrameWork库从一定意义上何 ...
- 谈谈一些有趣的CSS题目(十三)-- 巧妙地制作背景色渐变动画!
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- Git远程仓库(二)
昨天讲了Git安装使用和基本的命令,今天我说一下如何通过Git将本地管理的仓库添加到远程库 首先我们需要在www.github.com(如果打不开网页,请注意科学上网)上注册一个免费的账号,邮箱验证完 ...
- JQ鼠标右键点击功能 兼容IE8
//阻止浏览器当前DIV默认右键事件 $("div").unbind("mousedown").bind("contextmenu", fu ...
- 极客君教你破解隔壁妹子的wifi密码,成功率高达90%
首先,给大家推荐一个我自己维护的网站: 开发者网址导航:http://www.dev666.com/ 破解wifi密码听起来很复杂,实际上也不是非常的复杂,极客君(微信公众帐号:极客峰)今天教大家如何 ...