Support more druid postaggregations. (#2235)

This commit is contained in:
Bogdan 2017-02-23 17:14:00 -08:00 committed by GitHub
parent ede4dffcb7
commit 3018356588

View File

@ -37,7 +37,9 @@ from flask_babel import lazy_gettext as _
from pydruid.client import PyDruid from pydruid.client import PyDruid
from pydruid.utils.aggregators import count from pydruid.utils.aggregators import count
from pydruid.utils.filters import Dimension, Filter 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 pydruid.utils.having import Aggregation
from six import string_types from six import string_types
@ -2354,9 +2356,30 @@ class DruidDatasource(Model, AuditMixinNullable, Datasource, ImportMixin):
all_metrics += conf.get('fieldNames', []) all_metrics += conf.get('fieldNames', [])
if conf.get('type') == 'javascript': if conf.get('type') == 'javascript':
post_aggs[metric_name] = JavascriptPostAggregator( post_aggs[metric_name] = JavascriptPostAggregator(
name=conf.get('name'), name=conf.get('name', ''),
field_names=conf.get('fieldNames'), field_names=conf.get('fieldNames', []),
function=conf.get('function')) 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: else:
post_aggs[metric_name] = Postaggregator( post_aggs[metric_name] = Postaggregator(
conf.get('fn', "/"), conf.get('fn', "/"),