mirror of https://github.com/apache/druid.git
fix npe in topNBinaryFn with post aggs
This commit is contained in:
parent
310073685d
commit
bbedde3418
|
@ -91,7 +91,19 @@ public class TopNBinaryFn implements BinaryFn<Result<TopNResultValue>, Result<To
|
||||||
|
|
||||||
String dimension = dimensionSpec.getOutputName();
|
String dimension = dimensionSpec.getOutputName();
|
||||||
for (DimensionAndMetricValueExtractor arg1Val : arg1Vals) {
|
for (DimensionAndMetricValueExtractor arg1Val : arg1Vals) {
|
||||||
retVals.put(arg1Val.getStringDimensionValue(dimension), arg1Val);
|
final String dimensionValue = arg1Val.getStringDimensionValue(dimension);
|
||||||
|
Map<String, Object> retVal = new LinkedHashMap<String, Object>(aggregations.size() + 2);
|
||||||
|
retVal.put(dimension, dimensionValue);
|
||||||
|
|
||||||
|
for (AggregatorFactory factory : aggregations) {
|
||||||
|
final String metricName = factory.getName();
|
||||||
|
retVal.put(metricName, arg1Val.getMetric(metricName));
|
||||||
|
}
|
||||||
|
for (PostAggregator postAgg : postAggregations) {
|
||||||
|
retVal.put(postAgg.getName(), postAgg.compute(retVal));
|
||||||
|
}
|
||||||
|
|
||||||
|
retVals.put(dimensionValue, new DimensionAndMetricValueExtractor(retVal));
|
||||||
}
|
}
|
||||||
for (DimensionAndMetricValueExtractor arg2Val : arg2Vals) {
|
for (DimensionAndMetricValueExtractor arg2Val : arg2Vals) {
|
||||||
final String dimensionValue = arg2Val.getStringDimensionValue(dimension);
|
final String dimensionValue = arg2Val.getStringDimensionValue(dimension);
|
||||||
|
@ -112,7 +124,18 @@ public class TopNBinaryFn implements BinaryFn<Result<TopNResultValue>, Result<To
|
||||||
|
|
||||||
retVals.put(dimensionValue, new DimensionAndMetricValueExtractor(retVal));
|
retVals.put(dimensionValue, new DimensionAndMetricValueExtractor(retVal));
|
||||||
} else {
|
} else {
|
||||||
retVals.put(dimensionValue, arg2Val);
|
Map<String, Object> retVal = new LinkedHashMap<String, Object>(aggregations.size() + 2);
|
||||||
|
retVal.put(dimension, dimensionValue);
|
||||||
|
|
||||||
|
for (AggregatorFactory factory : aggregations) {
|
||||||
|
final String metricName = factory.getName();
|
||||||
|
retVal.put(metricName, arg2Val.getMetric(metricName));
|
||||||
|
}
|
||||||
|
for (PostAggregator postAgg : postAggregations) {
|
||||||
|
retVal.put(postAgg.getName(), postAgg.compute(retVal));
|
||||||
|
}
|
||||||
|
|
||||||
|
retVals.put(dimensionValue, new DimensionAndMetricValueExtractor(retVal));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -324,9 +324,9 @@ public class TopNBinaryFnTest
|
||||||
"testdim", "2"
|
"testdim", "2"
|
||||||
),
|
),
|
||||||
ImmutableMap.<String, Object>of(
|
ImmutableMap.<String, Object>of(
|
||||||
"rows", 0L,
|
"rows", 4L,
|
||||||
"index", 1L,
|
"index", 5L,
|
||||||
"testdim", "3"
|
"testdim", "other"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -336,6 +336,12 @@ public class TopNBinaryFnTest
|
||||||
currTime,
|
currTime,
|
||||||
new TopNResultValue(
|
new TopNResultValue(
|
||||||
ImmutableList.<Map<String, Object>>of(
|
ImmutableList.<Map<String, Object>>of(
|
||||||
|
ImmutableMap.<String, Object>of(
|
||||||
|
"testdim", "other",
|
||||||
|
"rows", 4L,
|
||||||
|
"index", 5L,
|
||||||
|
"addrowsindexconstant", 10.0
|
||||||
|
),
|
||||||
ImmutableMap.<String, Object>of(
|
ImmutableMap.<String, Object>of(
|
||||||
"testdim", "1",
|
"testdim", "1",
|
||||||
"rows", 3L,
|
"rows", 3L,
|
||||||
|
@ -357,7 +363,7 @@ public class TopNBinaryFnTest
|
||||||
QueryGranularity.ALL,
|
QueryGranularity.ALL,
|
||||||
new DefaultDimensionSpec("testdim", null),
|
new DefaultDimensionSpec("testdim", null),
|
||||||
new NumericTopNMetricSpec("addrowsindexconstant"),
|
new NumericTopNMetricSpec("addrowsindexconstant"),
|
||||||
2,
|
3,
|
||||||
aggregatorFactories,
|
aggregatorFactories,
|
||||||
postAggregators
|
postAggregators
|
||||||
).apply(
|
).apply(
|
||||||
|
|
Loading…
Reference in New Issue