druid-io / pydruid

A Python connector for Druid
Other
507 stars 198 forks source link

Query construction results in nested filters instead of an array #42

Closed giorgosera closed 8 years ago

giorgosera commented 8 years ago

I'm trying to run the following query

selected_apps = ((dr.Dimension('appId') == 0) | (dr.Dimension('appId') == 1) | (dr.Dimension('appId') == 2))

query = druid.topn(datasource='sessions', granularity='all', intervals='2016-02-05/P7D', filter=selected_apps, aggregations={'sessions': dr.longsum('sessions')}, dimension='appId', metric='sessions')

Looking at the actual constructed query I get:

{
    "metric": "sessions",·
    "aggregations": [
        {
            "fieldName": "sessions",·
            "type": "longSum",·
            "name": "sessions"
        }
    ],·
    "dimension": "appId",·
    "filter": {
        "fields": [
            {
                "fields": [
                    {
                        "type": "selector",·
                        "dimension": "appId",·
                        "value": 0
                    },·
                    {
                        "type": "selector",·
                        "dimension": "appId",·
                        "value": 1
                    }
                ],·
                "type": "or"
            },·
            {
                "type": "selector",·
                "dimension": "appId",·
                "value": 2
            }
        ],·
        "type": "or"
    },·
    "intervals": "2016-02-05/P7D",·
    "dataSource": "sessions",·
    "granularity": "all",·
    "queryType": "topN"
}

Inside the filter object I was expecting the fields array to contain all selectors at the same level and not nested.

giorgosera commented 8 years ago

A PR is ready to be merged resolving this issue: https://github.com/druid-io/pydruid/pull/43