From 301835658838fc0d9cb2d807ee8fa06b0ed44550 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 23 Feb 2017 17:14:00 -0800 Subject: [PATCH] Support more druid postaggregations. (#2235) --- superset/models.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/superset/models.py b/superset/models.py index 553309ad83..7a28ce3bb5 100644 --- a/superset/models.py +++ b/superset/models.py @@ -37,7 +37,9 @@ from flask_babel import lazy_gettext as _ from pydruid.client import PyDruid from pydruid.utils.aggregators import count from pydruid.utils.filters import Dimension, Filter -from pydruid.utils.postaggregator import Postaggregator +from pydruid.utils.postaggregator import ( + Postaggregator, Quantile, Quantiles, Field, Const, HyperUniqueCardinality, +) from pydruid.utils.having import Aggregation from six import string_types @@ -2354,9 +2356,30 @@ class DruidDatasource(Model, AuditMixinNullable, Datasource, ImportMixin): all_metrics += conf.get('fieldNames', []) if conf.get('type') == 'javascript': post_aggs[metric_name] = JavascriptPostAggregator( - name=conf.get('name'), - field_names=conf.get('fieldNames'), - function=conf.get('function')) + name=conf.get('name', ''), + field_names=conf.get('fieldNames', []), + function=conf.get('function', '')) + elif conf.get('type') == 'quantile': + post_aggs[metric_name] = Quantile( + conf.get('name', ''), + conf.get('probability', ''), + ) + elif conf.get('type') == 'quantiles': + post_aggs[metric_name] = Quantiles( + conf.get('name', ''), + conf.get('probabilities', ''), + ) + elif conf.get('type') == 'fieldAccess': + post_aggs[metric_name] = Field(conf.get('name'), '') + elif conf.get('type') == 'constant': + post_aggs[metric_name] = Const( + conf.get('value'), + output_name=conf.get('name', '') + ) + elif conf.get('type') == 'hyperUniqueCardinality': + post_aggs[metric_name] = HyperUniqueCardinality( + conf.get('name'), '' + ) else: post_aggs[metric_name] = Postaggregator( conf.get('fn', "/"),