mirror of https://github.com/apache/druid.git
Adding the null check in combine and fold in doublesSketch (#14568)
This commit is contained in:
parent
30a91be15a
commit
8087aa2b80
|
@ -240,8 +240,12 @@ public class DoublesSketchAggregatorFactory extends AggregatorFactory
|
||||||
public Object combine(final Object lhs, final Object rhs)
|
public Object combine(final Object lhs, final Object rhs)
|
||||||
{
|
{
|
||||||
final DoublesUnion union = DoublesUnion.builder().setMaxK(k).build();
|
final DoublesUnion union = DoublesUnion.builder().setMaxK(k).build();
|
||||||
union.union((DoublesSketch) lhs);
|
if (lhs != null) {
|
||||||
union.union((DoublesSketch) rhs);
|
union.union((DoublesSketch) lhs);
|
||||||
|
}
|
||||||
|
if (rhs != null) {
|
||||||
|
union.union((DoublesSketch) rhs);
|
||||||
|
}
|
||||||
return union.getResultAndReset();
|
return union.getResultAndReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,7 +267,9 @@ public class DoublesSketchAggregatorFactory extends AggregatorFactory
|
||||||
public void fold(final ColumnValueSelector selector)
|
public void fold(final ColumnValueSelector selector)
|
||||||
{
|
{
|
||||||
final DoublesSketch sketch = (DoublesSketch) selector.getObject();
|
final DoublesSketch sketch = (DoublesSketch) selector.getObject();
|
||||||
union.union(sketch);
|
if (sketch != null) {
|
||||||
|
union.union(sketch);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
@ -25,8 +25,11 @@ import nl.jqno.equalsverifier.EqualsVerifier;
|
||||||
import org.apache.druid.jackson.DefaultObjectMapper;
|
import org.apache.druid.jackson.DefaultObjectMapper;
|
||||||
import org.apache.druid.java.util.common.granularity.Granularities;
|
import org.apache.druid.java.util.common.granularity.Granularities;
|
||||||
import org.apache.druid.query.Druids;
|
import org.apache.druid.query.Druids;
|
||||||
|
import org.apache.druid.query.aggregation.AggregateCombiner;
|
||||||
|
import org.apache.druid.query.aggregation.Aggregator;
|
||||||
import org.apache.druid.query.aggregation.AggregatorFactory;
|
import org.apache.druid.query.aggregation.AggregatorFactory;
|
||||||
import org.apache.druid.query.aggregation.CountAggregatorFactory;
|
import org.apache.druid.query.aggregation.CountAggregatorFactory;
|
||||||
|
import org.apache.druid.query.aggregation.TestDoubleColumnSelectorImpl;
|
||||||
import org.apache.druid.query.aggregation.post.FieldAccessPostAggregator;
|
import org.apache.druid.query.aggregation.post.FieldAccessPostAggregator;
|
||||||
import org.apache.druid.query.aggregation.post.FinalizingFieldAccessPostAggregator;
|
import org.apache.druid.query.aggregation.post.FinalizingFieldAccessPostAggregator;
|
||||||
import org.apache.druid.query.timeseries.TimeseriesQuery;
|
import org.apache.druid.query.timeseries.TimeseriesQuery;
|
||||||
|
@ -172,4 +175,24 @@ public class DoublesSketchAggregatorFactoryTest
|
||||||
Assert.assertEquals(factory, factory.withName("myFactory"));
|
Assert.assertEquals(factory, factory.withName("myFactory"));
|
||||||
Assert.assertEquals("newTest", factory.withName("newTest").getName());
|
Assert.assertEquals("newTest", factory.withName("newTest").getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNullSketches()
|
||||||
|
{
|
||||||
|
final DoublesSketchAggregatorFactory factory = new DoublesSketchAggregatorFactory(
|
||||||
|
"myFactory",
|
||||||
|
"myField",
|
||||||
|
1024,
|
||||||
|
1000L,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
final double[] values = new double[]{1, 2, 3, 4, 5, 6};
|
||||||
|
final TestDoubleColumnSelectorImpl selector = new TestDoubleColumnSelectorImpl(values);
|
||||||
|
final Aggregator agg1 = new DoublesSketchBuildAggregator(selector, 8);
|
||||||
|
Assert.assertNotNull(factory.combine(null, agg1.get()));
|
||||||
|
Assert.assertNotNull(factory.combine(agg1.get(), null));
|
||||||
|
AggregateCombiner ac = factory.makeAggregateCombiner();
|
||||||
|
ac.fold(new TestDoublesSketchColumnValueSelector());
|
||||||
|
Assert.assertNotNull(ac.getObject());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.druid.query.aggregation.datasketches.quantiles;
|
||||||
|
|
||||||
|
import org.apache.datasketches.quantiles.DoublesSketch;
|
||||||
|
import org.apache.druid.query.monomorphicprocessing.RuntimeShapeInspector;
|
||||||
|
import org.apache.druid.segment.ColumnValueSelector;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public class TestDoublesSketchColumnValueSelector implements ColumnValueSelector<DoublesSketch>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void inspectRuntimeShape(RuntimeShapeInspector inspector)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getDouble()
|
||||||
|
{
|
||||||
|
return 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getFloat()
|
||||||
|
{
|
||||||
|
return 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getLong()
|
||||||
|
{
|
||||||
|
return 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isNull()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public DoublesSketch getObject()
|
||||||
|
{
|
||||||
|
return DoublesSketchOperations.EMPTY_SKETCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends DoublesSketch> classOfObject()
|
||||||
|
{
|
||||||
|
return DoublesSketchOperations.EMPTY_SKETCH.getClass();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue