Filter groupBy Query Results

GroupBy Query에 대한 결과에 대해서 필터링을 할 수 있다. 우리가 흔히 아는 having 조건이다.

{
    "type": "groupBy",
    "having": {
    
    },
    ...
}

Druid에서는 다음과 같은 Having 조건을 사용할 수 있다.

Query Filter

Query filter는 Druid에서 사용하는 Filter들을 그대로 사용할 수 있다. 기본 문법은 다음과 같다.

{
    "type": "filter",
    "filter": <any Druid query filter>
}

// example
{
    "type": "filter",
    "filter": {
        "type": "selector",
        "dimension": "name",
        "value": "yunseop"
    }
}

__time 을 사용해서 타임스탬프에 대한 필터링도 가능하다.

Numeric Filter

집계 결과에 대해서 필터링 하는 것이다.

Equal To

equalTo을 사용하고, HAVING <aggregate> = <value>과 같다.

{
    "type": "equalTo",
    "aggregation": "<aggregate_metric>",
    "value": "<numeric_value>"
}

Greater Than

greaterThan을 사용하고. HAVING <aggregate> > <value>과 같다.

{
    "type": "greaterThan",
    "aggregation": "<aggregate_metric>",
    "value": "<numeric_value>"
}

Less Than

lessThan을 사용하고 다음. HAVING <aggregate> < <value>과 같다.

{
    "type": "lessThan",
    "aggregation": "<aggregate_metric>",
    "value": "<numeric_value>"
}

Dimension Selector Filter

dimSelector

dimension 값을 비교해서 같은 것만 가져오는 것인데, Query Filter와 내부적으로 동작이 다른건지 뭔지 잘 모르겠다.

{
    "type": "dimSelector",
    "dimension": "<dimension>",
    "value": "<dimension_value>"
}

Logical Expression Filter

AND

havingSpecs에 있는 Having 절들을 모두 만족해야 한다.

{
    "type": "and",
    "havingSpecs": [
        {having clause},
        {having clause},
        {having clause},
    ]
}

OR

havingSpecs에 있는 Having 절들중 하나를 만족해야 한다.

{
    "type": "or",
    "havingSpecs": [
        {having clause},
        {having clause},
        {having clause},
    ]
}

NOT

havingSpec의 Having 절을 만족하지 않아야 한다.

{
    "type": "not",
    "havingSpec": {having clause}
}

Refer

  • http://druid.io/docs/latest/querying/having.html