Skip to content

Commit

Permalink
Include post aggregation in the druid requests
Browse files Browse the repository at this point in the history
Conflicts:
	caravel/models.py
  • Loading branch information
x4base committed Apr 28, 2016
1 parent 8ef0f15 commit b9941d4
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
28 changes: 28 additions & 0 deletions caravel/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
from pydruid.client import PyDruid
from flask.ext.appbuilder.models.decorators import renders
from pydruid.utils.filters import Dimension, Filter
from pydruid.utils.postaggregator import Postaggregator
from pydruid.utils.postaggregator import Const as ConstPostaggregator
from pydruid.utils.postaggregator import Field as FieldPostaggregator
from six import string_types
from sqlalchemy import (
Column, Integer, String, ForeignKey, Text, Boolean, DateTime, Date,
Expand Down Expand Up @@ -1018,6 +1021,26 @@ def sync_to_db(cls, name, cluster):
col_obj.datasource = datasource
col_obj.generate_metrics()

@classmethod
def get_post_aggregator(cls, params_json):
try:
params = json.loads(params_json)
except Exception:
# TODO error messages
raise

obj = None
_type = params.get('type')
name = params.get('name')
if _type == 'arithmetic':
obj = Postaggregator(params.get('fn'), params.get('fields'), name)
elif _type == 'constant':
obj = ConstPostaggregator(params.get('value'), name)
elif _type == 'fieldAccess':
obj = FieldPostaggregator(params.get('fieldName'))

return obj

def query( # druid
self, groupby, metrics,
granularity,
Expand Down Expand Up @@ -1048,6 +1071,10 @@ def query( # druid
m.metric_name: m.json_obj
for m in self.metrics if m.metric_name in metrics
}
post_aggregators = {
m.name: self.get_post_aggregator(m.json)
for m in self.post_aggregators if m.name in extras.get('post_aggregators')
}
granularity = granularity or "all"
if granularity != "all":
granularity = utils.parse_human_timedelta(
Expand All @@ -1063,6 +1090,7 @@ def query( # druid
datasource=self.datasource_name,
dimensions=groupby,
aggregations=aggregations,
post_aggregations=post_aggregators,
granularity=granularity,
intervals=from_dttm.isoformat() + '/' + to_dttm.isoformat(),
)
Expand Down
1 change: 1 addition & 0 deletions caravel/viz.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ def query_obj(self):
'having': form_data.get("having", ''),
'time_grain_sqla': form_data.get("time_grain_sqla", ''),
'druid_time_origin': form_data.get("druid_time_origin", ''),
'post_aggregators': form_data.get("post_aggregators", ''),
}
d = {
'granularity': granularity,
Expand Down

0 comments on commit b9941d4

Please sign in to comment.