/** * Test that the metric is associated with an Aggregation Metric and return that Aggregation. * * @param sourceMetric The source metric * * @return The aggregation used by this metric */ private Aggregation assertDependentIsAggregationMetric(LogicalMetric sourceMetric) { MetricField metricField = sourceMetric.getMetricField(); if (!(metricField instanceof Aggregation)) { String message = String.format( "FilteredAggregationMaker requires an aggregation metric, but found: %s.", sourceMetric.getName() ); LOG.error(message); throw new IllegalArgumentException(message); } return (Aggregation) metricField; }
/** * Prepare a post aggregation for a field expecting a numeric value. * <p> * The post-agg is created per the following heuristics: * <dl> * <dt>If it's an aggregator * <dd>wrap it in a field accessor * <dt>If it's a sketch * <dd>wrap it in a sketch estimate * <dt>If it's already a numeric post aggregator * <dd>simply return it * </dl> * * @param fieldName The name for the aggregation or post aggregation column being gotten * * @return A post aggregator representing a number field value * * @deprecated use the static version {@link #getNumericField(MetricField)} by preference */ @Deprecated protected PostAggregation getNumericField(String fieldName) { return getNumericField(metrics.get(fieldName).getMetricField()); }
/** * Prepare a post aggregation for a field expecting a sketch value. * <p> * The post-agg is created per the following heuristics: * <dl> * <dt>If it's an aggregator * <dd>wrap it in a field accessor * <dt>If it's a sketch estimate * <dd>unwrap the sketch estimate * <dt>If it's already a sketch post aggregator * <dd>simply return it * <dt>Otherwise</dt> * <dd>This is an illegal field</dd> * </dl> * * @param fieldName The name for the aggregation or post aggregation column being gotten * * @return A post aggregator representing a number field value * * @deprecated use the static version {@link MetricMaker#getSketchField(MetricField)} by preference */ @Deprecated protected PostAggregation getSketchField(String fieldName) { // Get the field return getSketchField(metrics.get(fieldName).getMetricField()); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { // Get the Metric that is being averaged over LogicalMetric dependentMetric = metrics.get(dependentMetrics.get(0)); // Get the field being subtotalled in the inner query MetricField sourceMetric = convertToSketchEstimateIfNeeded(dependentMetric.getMetricField()); // Build the TemplateDruidQuery for the metric TemplateDruidQuery innerQuery = buildInnerQuery(sourceMetric, dependentMetric.getTemplateDruidQuery()); TemplateDruidQuery outerQuery = buildOuterQuery(logicalMetricInfo.getName(), sourceMetric, innerQuery); return new LogicalMetric(outerQuery, NO_OP_MAPPER, logicalMetricInfo); }