@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { return new LogicalMetric( null, ROW_NUM_MAPPER, logicalMetricInfo ); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentDimensions) { Set<Dimension> dimensions = dependentDimensions.stream() .map(dimensionDictionary::findByApiName) .collect(Collectors.toSet()); Set<Aggregation> aggs = Collections.singleton( new CardinalityAggregation(logicalMetricInfo.getName(), dimensions, byRow) ); return new LogicalMetric(new TemplateDruidQuery(aggs, Collections.emptySet()), NO_OP_MAPPER, logicalMetricInfo); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { String metricName = logicalMetricInfo.getName(); Aggregation aggregation = aggregationFactory.apply(metricName, dependentMetrics.get(0)); return new LogicalMetric( new TemplateDruidQuery(Collections.singleton(aggregation), Collections.emptySet()), getResultSetMapper(metricName), logicalMetricInfo ); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { String metricName = logicalMetricInfo.getName(); try { Set<PostAggregation> postAggregations = Collections.singleton(new ConstantPostAggregation( metricName, new Double(dependentMetrics.get(0)) )); return new LogicalMetric( new TemplateDruidQuery(Collections.emptySet(), postAggregations), NO_OP_MAPPER, logicalMetricInfo ); } catch (NumberFormatException nfe) { String message = String.format( "%s value '%s' does not parse to a number", metricName, dependentMetrics.get(0) ); LOG.error(message); throw new IllegalArgumentException(message, nfe); } }
@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 ); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { TemplateDruidQuery query = new TemplateDruidQuery( Collections.singleton(new CountAggregation(logicalMetricInfo.getName())), Collections.emptySet() ); return new LogicalMetric(query, NO_OP_MAPPER, logicalMetricInfo); }
@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); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { LogicalMetric sourceMetric = metricDictionary.get(dependentMetrics.get(0)); Aggregation sourceAggregation = assertDependentIsAggregationMetric(sourceMetric); FilteredAggregation filteredAggregation = new FilteredAggregation( logicalMetricInfo.getName(), sourceAggregation, filter ); return new LogicalMetric( new TemplateDruidQuery( ImmutableSet.of(filteredAggregation), Collections.emptySet(), sourceMetric.getTemplateDruidQuery().getInnerQuery().orElse(null) ), sourceMetric.getCalculation(), logicalMetricInfo ); }
@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); }
return new LogicalMetric( templateDruidQuery, logicalMetric.getCalculation(),
new LogicalMetric( new TemplateDruidQuery( Collections.singleton(new LongMinAggregation( "ImBooleanISwear") ), new LogicalMetric( new TemplateDruidQuery( Collections.singleton( new LogicalMetric( new TemplateDruidQuery( Collections.singleton(new LongMinAggregation(
new LogicalMetric( new TemplateDruidQuery( Collections.singleton(new LongMinAggregation( "ImBooleanISwear") ), new LogicalMetric( new TemplateDruidQuery( Collections.singleton( new LogicalMetric( new TemplateDruidQuery( Collections.singleton(new LongMinAggregation(