druid 查询接口的使用
来源:互联网 发布:淘宝的渠道管理在哪里 编辑:程序博客网 时间:2024/06/05 16:25
核心
druid 查询接口的使用
druid的查询接口是HTTP REST 风格的查询方式,使用HTTP REST 风格查询(Broker,Historical,或者Realtime)节点的数据,查询参数为JSON格式,每个节点类型都会暴露相同的REST查询接口
curl -X POST '<queryable_host>:<port>/druid/v2/?pretty' -H 'Content-Type:application/json' -d @<query_json_file>
queryable_host: broker节点ip port: broker 节点端口 默认是8082
curl -L -H'Content-Type: application/json' -XPOST --data-binary @quickstart/aa.json http://10.20.23.41:8082/druid/v2/?pretty
query 查询的类型有
1、Timeseries
2、TopN
3、GroupBy
4、Time Boundary
5、Segment Metadata
6、Datasource Metadata
7、Search
8、select
其中 Timeseries、TopN、GroupBy为聚合查询,Time Boundary、Segment Metadata、Datasource Metadata 为元数据查询,Search 为搜索查询
1、Timeseries
对于需要统计一段时间内的汇总数据,或者是指定时间粒度的汇总数据,druid可以通过Timeseries来完成。
timeseries 查询包括如下的字段
字段名 描述 是否必须queryType 查询类型,这里只有填写timeseries查询 是dataSource 要查询的数据集 是descending 是否降序 否intervals 查询的时间范围,默认是ISO-8601格式 是granularity 查询结果进行聚合的时间粒度 是filter 过滤条件 否aggregations 聚合 是 postAggregations 后期聚合 否context 指定一些查询参数 否
timeseries输出每个时间粒度内指定条件的统计信息,通过filter指定条件过滤,通过aggregations和postAggregations指定聚合方式。timeseries不能输出维度信息,granularity支持all,none,second,minute,hour,day,week,month,year等维度
all:汇总1条输出 none:不推荐使用
其他的:则输出相应粒度统计信息
查询的json
{ "aggregations": [ { "type": "count", "name": "count" } ], "intervals": "1917-08-25T08:35:20+00:00/2017-08-25T08:35:20+00:00", "dataSource": "app_auto_prem_qd_pp3", "granularity": "all", "postAggregations": [], "queryType": "timeseries"}
等同于sql select count(1) from app_auto_prem_qd_pp3
TopN
返回指定维度和排序字段的有序top-n序列.TopN支持返回前N条记录,并支持指定的Metric为排序依据
{ "metric": "sum__total_standard_premium", "aggregations": [ { "type": "doubleSum", "fieldName": "total_standard_premium", "name": "sum__total_standard_premium" } ], "dimension": "is_new_car", "intervals": "1917-08-29T20:05:10+00:00/2017-08-29T20:05:10+00:00", "dataSource": "app_auto_prem_qd_pp3", "granularity": "all", "threshold": 50000, "postAggregations": [], "queryType": "topN"}
字段名 描述 是否必须queryType 对于TopN查询,这个必须是TopN 是dataSource 要查询的数据集 是intervals 查询的时间范围,默认是ISO-8601格式 是filter 过滤条件 否aggregations 聚合 是postAggregations 后期聚合 否dimension 进行TopN查询的维护,一个TopN查询只能有一个维度 是threshold TopN中的N值 是metric 进行统计并排序的metric 是context 指定一些查询参数 否
metric:是TopN专属
方式:
"metric":"<metric_name>" 默认情况是升序排序的"metric" : { "type" : "numeric", //指定按照numeric 降序排序 "metric" : "<metric_name>"}"metric" : { "type" : "inverted", //指定按照numeric 升序排序 "metric" : "<metric_name>"}"metric" : { "type" : "lexicographic", //指定按照字典序排序 "metric" : "<metric_name>"}"metric" : { "type" : "alphaNumeric", //指定按照数字排序 "metric" : "<metric_name>"}
需要注意的是,TopN是一个近似算法,每一个segment返回前1000条进行合并得到最后的结果,如果dimension
的基数在1000以内,则是准确的,超过1000就是近似值
groupBy
groupBy 类似于SQL中的group by 操作,能对指定的多个维度进行分组,也支持对指定的维度进行排序,并输出limit行数,同时支持having操作
{ "dimensions": [ "is_new_car", "status" ], "aggregations": [ { "type": "doubleSum", "fieldName": "total_standard_premium", "name": "sum__total_standard_premium" } ], "having": { "type": "greaterThan", "aggregation": "sum__total_standard_premium", "value": "484000" }, "intervals": "1917-08-29T20:26:52+00:00/2017-08-29T20:26:52+00:00", "limitSpec": { "limit": 2, "type": "default", "columns": [ { "direction": "descending", "dimension": "sum__total_standard_premium" } ] }, "granularity": "all", "postAggregations": [], "queryType": "groupBy", "dataSource": "app_auto_prem_qd_pp3"}
等同于sql select is_new_car,status,sum(total_standard_premium) from app_auto_prem_qd_pp3 group by is_new_car,status limit 50000 having sum(total_standard_premium)>484000
{ "version" : "v1", "timestamp" : "1917-08-30T04:26:52.000+08:00", "event" : { "sum__total_standard_premium" : 8.726074368E9, "is_new_car" : "是", "status" : null }}, { "version" : "v1", "timestamp" : "1917-08-30T04:26:52.000+08:00", "event" : { "sum__total_standard_premium" : 615152.0, "is_new_car" : "否", "status" : null } }
字段名 描述 是否必须queryType 对于GroupBy查询,该字段必须是GroupBy 是dataSource 要查询的数据集 是dimensions 进行GroupBy查询的维度集合 是limitSpec 统计结果进行排序 否having 对统计结果进行筛选 否granularity 查询结果进行聚合的时间粒度 是 postAggregations 后聚合器 否intervals 查询的时间范围,默认是ISO-8601格式 是context 指定一些查询参数 否
GroupBy特有的字段为limitSpec 和having
limitSpec
指定排序规则和limit的行数
{ "type" : "default", "limit":<integer_value>, "columns":[list of OrderByColumnSpec]}
其中columns是一个数组,可以指定多个排序字段,排序字段可以使demension 或者metric 指定排序规则的拼写方式
{ "dimension" :"<Any dimension or metric name>", "direction" : <"ascending"|"descending">} "limitSpec": { "limit": 2, "type": "default", "columns": [ { "direction": "descending", "dimension": "sum__total_standard_premium" }, { "direction": "ascending", "dimension": "is_new_car" } ] }
having 类似于SQL中的having操作
select
select 类似于sql中select操作,select用来查看druid中的存储的数据,并支持按照指定过滤器和时间段查看指定维度和metric,能通过descending字段指定排序顺序,并支持分页拉取,但不支持aggregations和postAggregations
json 实例如下
{ "dimensions": [ "status", "is_new_car" ], "pagingSpec":{ "pagingIdentifiers":{}, "threshold":3 }, "intervals": "1917-08-25T08:35:20+00:00/2017-08-25T08:35:20+00:00", "dataSource": "app_auto_prem_qd_pp3", "granularity": "all", "context" : { "skipEmptyBuckets" : "true" }, "queryType": "select"}
相当于SQL语句 select status,is_new_car from app_auto_prem_qd_pp3 limit 3
[ { "timestamp" : "2017-08-22T14:00:00.000Z", "result" : { "pagingIdentifiers" : { "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00" : 2 }, "dimensions" : [ "is_new_car", "status" ], "metrics" : [ "total_actual_premium", "count", "total_standard_premium" ], "events" : [ { "segmentId" : "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00", "offset" : 0, "event" : { "timestamp" : "2017-08-22T22:00:00.000+08:00", "status" : null, "is_new_car" : "是", "total_actual_premium" : 1012.5399780273438, "count" : 1, "total_standard_premium" : 1250.050048828125 } }, { "segmentId" : "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00", "offset" : 1, "event" : { "timestamp" : "2017-08-22T22:00:00.000+08:00", "status" : null, "is_new_car" : "是", "total_actual_premium" : 708.780029296875, "count" : 1, "total_standard_premium" : 1250.050048828125 } }, { "segmentId" : "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00", "offset" : 2, "event" : { "timestamp" : "2017-08-22T22:00:00.000+08:00", "status" : null, "is_new_car" : "是", "total_actual_premium" : 1165.489990234375, "count" : 1, "total_standard_premium" : 1692.800048828125 } } ] }} ]
在pagingSpec中指定分页拉取的offset和条目数,在结果中会返回下次拉取的offset,
"pagingSpec":{ "pagingIdentifiers":{}, "threshold":3, "fromNext" :true }
Search
search 查询返回匹配中的维度,类似于SQL中的topN操作,但是支持更多的匹配操作,
json示例如
{ "queryType": "search", "dataSource": "app_auto_prem_qd_pp3", "granularity": "all", "limit": 2, "searchDimensions": [ "data_source", "department_code" ], "query": { "type": "insensitive_contains", "value": "1" }, "sort" : { "type": "lexicographic" }, "intervals": [ "1917-08-25T08:35:20+00:00/2017-08-25T08:35:20+00:00" ]}
searchDimensions搜索的维度
字段名 描述 是否必须queryType 对于search查询,该字段必须是search 是dataSource 要查询的数据集 是searchDimensions 运行search的维度 是limit 对统计结果进行限制 否(默认1000)granularity 查询结果进行聚合的时间粒度 是 intervals 查询的时间范围,默认是ISO-8601格式 是sort 指定搜索结果排序 否query 查询操作 是context 指定一些查询参数 否filter 过滤器 否
需要注意的是,search只是返回匹配中维度,不支持其他聚合操作,如果要将search作为查询条件进行topN,groupBy或timeseries等操作,则可以在filter字段中
指定各种过滤方式,filter字段也支持正则匹配,
查询结果如下:
[ { "timestamp" : "2017-08-22T08:00:00.000+08:00", "result" : [ { "dimension" : "data_source", "value" : "226931204023", "count" : 2 }, { "dimension" : "data_source", "value" : "226931204055", "count" : 7 } ]} ]
查询的选择
1、在可能的情况下,建议使用Timeseries和TopN查询而不是GroupBy,GroupBy是最灵活的查询,也是最差的表现。对于不需要对维度进行分组的聚合,Timeseries比GroupBy查询要快,对于单个维度进行分组和排序,TopN查询比GroupBy更加优化
- druid 查询接口的使用
- druid 元数据接口查询
- DRUID- 查询遇到的坑
- Java druid的使用
- druid的简单使用
- Druid查询
- Druid的发送数据和查询数据
- druid连接池的使用。
- Druid的使用-详细配置
- DRUID连接池的使用
- 阿里Druid数据源的使用
- DRUID连接池的使用
- Druid数据库连接池的使用
- DRUID连接池的使用
- 数据库连接池druid 的使用
- DRUID连接池的使用
- 常用的生活服务查询接口--使用python
- druid使用
- [HDU]1520 Anniversary party
- JS直接修改CSS属性/id属性/class属性
- 基于同步器的合并接口实现
- 多线程编程1——基础知识
- EasyMall第十天
- druid 查询接口的使用
- PyCharm激活
- springboot学习一(环境搭建入门学习)
- Bigtable: A Distributed Storage System for Structured Data : part3 API
- TortoiseSVN设置比较工具为 Beyond Compare
- oracl 导出与导入字节码不一样 ORA-12899报错
- 冒泡排序,选择排序,插入排序,快排
- 9月1日开发笔记
- java web体系发展历史和未来