@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { // Get the ArithmeticPostAggregation operands from the dependent metrics List<PostAggregation> operands = dependentMetrics.stream() .map(metrics::get) .map(LogicalMetric::getMetricField) .map(MetricMaker::getNumericField) .collect(Collectors.toList()); // Create the ArithmeticPostAggregation Set<PostAggregation> postAggregations = Collections.singleton(new ArithmeticPostAggregation( logicalMetricInfo.getName(), function, operands )); TemplateDruidQuery query = getMergedQuery(dependentMetrics).withPostAggregations(postAggregations); return new LogicalMetric( query, resultSetMapperSupplier.apply(logicalMetricInfo.getName()), logicalMetricInfo ); }
/** * Create the inner query for an average. * * @param sourceMetric The metric being averaged over * @param innerDependentQuery The original query supporting the metric being averaged * * @return A template query representing the inner aggregation */ private TemplateDruidQuery buildInnerQuery(MetricField sourceMetric, TemplateDruidQuery innerDependentQuery) { Set<PostAggregation> newInnerPostAggregations = (sourceMetric instanceof PostAggregation) ? ImmutableSet.of((PostAggregation) sourceMetric) : Collections.emptySet(); // Build the inner query with the new aggregations and with the count return innerDependentQuery.withAggregations(innerDependentQuery.getAggregations()) .withPostAggregations(newInnerPostAggregations) .merge(buildTimeGrainCounterQuery()); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { TemplateDruidQuery mergedQuery = getMergedQuery(dependentMetrics); // Get the ThetaSketchSetOperationPostAggregation operands from the dependent metrics List<PostAggregation> sketchPostAggregations = dependentMetrics.stream() .map(metrics::get) .map(LogicalMetric::getMetricField) .map(MetricMaker::getSketchField) .collect(Collectors.toList()); // Create the ThetaSketchSetOperationPostAggregation String metricName = logicalMetricInfo.getName(); ThetaSketchSetOperationPostAggregation setPostAggregation = new ThetaSketchSetOperationPostAggregation( metricName, function, sketchPostAggregations ); PostAggregation estimate = new ThetaSketchEstimatePostAggregation(metricName, setPostAggregation); TemplateDruidQuery query = mergedQuery.withPostAggregations(Collections.singleton(estimate)); return new LogicalMetric(query, new SketchRoundUpMapper(metricName), logicalMetricInfo); }
newInnerQuery = newInnerQuery.withPostAggregations( updateNestedQueryPostAggs( newInnerQuery.getPostAggregations(),