'Empty response from druid when using quantile data sketch aggregator
I am trying to compute the the 95th percentile value of a metric in druid. I came across this documentation https://druid.apache.org/docs/latest/development/extensions-core/datasketches-quantiles.html which says that we can build sketches from raw data at query time.
I prepared this druid query
{
"queryType": "timeseries",
"intervals": [
"2020-05-08T11:45:00.000Z/2020-05-08T11:50:00.000Z"
],
"granularity": "minute",
"dataSource": "datasource",
"filter": {
"type": "selector",
"dimension": "hostName",
"value": "host"
},
"postAggregation": [
{
"type": "quantilesDoublesSketchToQuantile",
"name": "dim",
"field": "dim",
"fraction": 0.5
}
]
}
But I am getting empty response from druid when I fire this query. The output is
[
{
"timestamp": "2020-05-08T11:45:00.000Z",
"result": {
}
},
{
"timestamp": "2020-05-08T11:46:00.000Z",
"result": {
}
},
{
"timestamp": "2020-05-08T11:47:00.000Z",
"result": {
}
},
{
"timestamp": "2020-05-08T11:48:00.000Z",
"result": {
}
},
{
"timestamp": "2020-05-08T11:49:00.000Z",
"result": {
}
}
]
I verified that data is present in druid within that time range. Thanks in advance
Solution 1:[1]
You have a postAggregator
of type quantilesDoublesSketchToQuantile
, which you're passing the field dim
. That function takes a sketch and converts it to a quantile after aggregation, but it doesn't build the sketch, rather it expects the sketch as input. You first need to create an aggregation using the function quantilesDoublesSketch
, that's where you pass in dim
, you can then use the sketch that results in your postAggregator
.
Solution 2:[2]
In case anyone's looking for a working code, here's what works for me:
{
"queryType": "timeseries",
"intervals": "2022-04-17T00:00:00+00:00/2101-01-01T00:00:00+00:00",
"aggregations": [
{
"fieldName": "my_dimension",
"name": "my_dimension_agg",
"type": "quantilesDoublesSketch"
}
],
"postAggregations": [
{
"type" : "quantilesDoublesSketchToQuantile",
"name": "median_value",
"field" : {
"type": "fieldAccess",
"fieldName": "my_dimension_agg"
},
"fraction" : 0.5
}
],
"dataSource": "my_datasource",
"granularity": "all"
}
Send query using:
curl -X POST 'http://your-server:8082/druid/v2/?pretty' -H 'Content-Type:application/json' -H 'Accept:application/json' -d @/home/directory/druid/your-query.json
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Tristan Reid |
Solution 2 | Clover |