@Override public void aggregate() { SerializablePairLongString pair = (SerializablePairLongString) selector.getObject(); if (pair != null && pair.lhs >= lastTime) { lastTime = pair.lhs; lastValue = pair.rhs; } } };
@Override public void aggregate() { SerializablePairLongString pair = (SerializablePairLongString) selector.getObject(); if (pair != null && pair.lhs < firstTime) { firstTime = pair.lhs; firstValue = pair.rhs; } } };
@Override public void aggregate(ByteBuffer buf, int position) { Long newTime = TimestampAggregatorFactory.convertLong(timestampSpec, selector.getObject()); if (newTime != null) { long prev = buf.getLong(position); buf.putLong(position, comparator.compare(prev, newTime) > 0 ? prev : newTime); } }
@Override public void aggregate() { Long value = TimestampAggregatorFactory.convertLong(timestampSpec, selector.getObject()); if (value != null) { most = comparator.compare(most, value) > 0 ? most : value; } }
@Override public void aggregate() { VarianceAggregatorCollector.combineValues(holder, selector.getObject()); } }
/** * This method uses synchronization because it can be used during indexing, * and Druid can call aggregate() and get() concurrently * https://github.com/apache/incubator-druid/pull/3956 */ @Override public void aggregate() { final ArrayOfDoublesSketch update = selector.getObject(); if (update == null) { return; } synchronized (this) { union.update(update); } }
@Override public void aggregate(ByteBuffer buf, int position) { VarianceAggregatorCollector holder2 = (VarianceAggregatorCollector) selector.getObject(); Preconditions.checkState(holder2 != null); long count = buf.getLong(position + COUNT_OFFSET); if (count == 0) { buf.putLong(position, holder2.count); buf.putDouble(position + SUM_OFFSET, holder2.sum); buf.putDouble(position + NVARIANCE_OFFSET, holder2.nvariance); return; } double sum = buf.getDouble(position + SUM_OFFSET); double nvariance = buf.getDouble(position + NVARIANCE_OFFSET); final double ratio = count / (double) holder2.count; final double t = sum / ratio - holder2.sum; nvariance += holder2.nvariance + (ratio / (count + holder2.count) * t * t); count += holder2.count; sum += holder2.sum; buf.putLong(position, count); buf.putDouble(position + SUM_OFFSET, sum); buf.putDouble(position + NVARIANCE_OFFSET, nvariance); }
@Override public void aggregate(ByteBuffer buf, int position) { SerializablePairLongString pair = (SerializablePairLongString) selector.getObject(); if (pair != null && pair.lhs != null) { ByteBuffer mutationBuffer = buf.duplicate(); mutationBuffer.position(position); long lastTime = mutationBuffer.getLong(position); if (pair.lhs < lastTime) { mutationBuffer.putLong(position, pair.lhs); if (pair.rhs != null) { byte[] valueBytes = StringUtils.toUtf8(pair.rhs); mutationBuffer.putInt(position + Long.BYTES, valueBytes.length); mutationBuffer.position(position + Long.BYTES + Integer.BYTES); mutationBuffer.put(valueBytes); } else { mutationBuffer.putInt(position + Long.BYTES, 0); } } } }
@Override public void aggregate(ByteBuffer buf, int position) { SerializablePairLongString pair = (SerializablePairLongString) selector.getObject(); if (pair != null && pair.lhs != null) { ByteBuffer mutationBuffer = buf.duplicate(); mutationBuffer.position(position); long lastTime = mutationBuffer.getLong(position); if (pair.lhs >= lastTime) { mutationBuffer.putLong(position, pair.lhs); if (pair.rhs != null) { byte[] valueBytes = StringUtils.toUtf8(pair.rhs); mutationBuffer.putInt(position + Long.BYTES, valueBytes.length); mutationBuffer.position(position + Long.BYTES + Integer.BYTES); mutationBuffer.put(valueBytes); } else { mutationBuffer.putInt(position + Long.BYTES, 0); } } } }
@Override public void aggregate() { Object object = selector.getObject(); if (object == null) { return; } if (collector == null) { collector = HyperLogLogCollector.makeLatestCollector(); } collector.fold((HyperLogLogCollector) object); }
@Override public void aggregate(ByteBuffer buf, int position) { Object update = selector.getObject(); if (update == null) { return; } Union union = getOrCreateUnion(buf, position); SketchAggregator.updateUnion(union, update); }
@Override public void aggregate() { Object update = selector.getObject(); if (update == null) { return; } synchronized (this) { if (union == null) { initUnion(); } updateUnion(union, update); } }
@Override public void aggregate(ByteBuffer buf, int position) { HyperLogLogCollector collector = (HyperLogLogCollector) selector.getObject(); if (collector == null) { return; } // Save position, limit and restore later instead of allocating a new ByteBuffer object final int oldPosition = buf.position(); final int oldLimit = buf.limit(); buf.limit(position + HyperLogLogCollector.getLatestNumBytesForDenseStorage()); buf.position(position); try { HyperLogLogCollector.makeCollector(buf).fold(collector); } finally { buf.limit(oldLimit); buf.position(oldPosition); } }
@Override public void aggregate(ByteBuffer buf, int position) { ApproximateHistogram hNext = selector.getObject(); if (hNext == null) { return; } ByteBuffer mutationBuffer = buf.duplicate(); mutationBuffer.position(position); ApproximateHistogram h0 = ApproximateHistogram.fromBytesDense(mutationBuffer); h0.setLowerLimit(lowerLimit); h0.setUpperLimit(upperLimit); h0.foldFast(hNext, tmpBufferP, tmpBufferB); mutationBuffer.position(position); h0.toBytesDense(mutationBuffer); }
@Override public void aggregate() { ApproximateHistogram h = selector.getObject(); if (h == null) { return; } if (h.binCount() + histogram.binCount() <= tmpBufferB.length) { histogram.foldFast(h, tmpBufferP, tmpBufferB); } else { histogram.foldFast(h); } }
@Override public void aggregate(ByteBuffer buf, int position) { ByteBuffer mutationBuffer = buf.duplicate(); mutationBuffer.position(position); FixedBucketsHistogram h0 = FixedBucketsHistogram.fromByteBufferFullNoSerdeHeader(mutationBuffer); Object val = selector.getObject(); if (val == null) { if (NullHandling.replaceWithDefault()) { h0.incrementMissing(); } else { h0.add(NullHandling.defaultDoubleValue()); } } else if (val instanceof String) { h0.combineHistogram(FixedBucketsHistogram.fromBase64((String) val)); } else if (val instanceof FixedBucketsHistogram) { h0.combineHistogram((FixedBucketsHistogram) val); } else { Double x = ((Number) val).doubleValue(); h0.add(x); } mutationBuffer.position(position); mutationBuffer.put(h0.toBytesFull(false)); }
@Test public void testObjectSelector() { final BaseObjectColumnValueSelector selector = X_PLUS_Y.makeColumnValueSelector("expr", COLUMN_SELECTOR_FACTORY); CURRENT_ROW.set(ROW0); Assert.assertEquals(null, selector.getObject()); CURRENT_ROW.set(ROW1); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(4.0d, selector.getObject()); } else { // y is null for row1 Assert.assertEquals(null, selector.getObject()); } CURRENT_ROW.set(ROW2); Assert.assertEquals(5.1d, selector.getObject()); CURRENT_ROW.set(ROW3); Assert.assertEquals(5L, selector.getObject()); }
@Override public void aggregate() { Object val = selector.getObject(); if (val == null) { if (NullHandling.replaceWithDefault()) { histogram.add(NullHandling.defaultDoubleValue()); } else { histogram.incrementMissing(); } } else if (val instanceof String) { LOG.info((String) val); histogram.combineHistogram(FixedBucketsHistogram.fromBase64((String) val)); } else if (val instanceof FixedBucketsHistogram) { histogram.combineHistogram((FixedBucketsHistogram) val); } else if (val instanceof Number) { histogram.add(((Number) val).doubleValue()); } else { throw new ISE("Unknown class for object: " + val.getClass()); } }
@Test public void testMakeSelectorsWithDotSupport() { final VirtualColumns virtualColumns = makeVirtualColumns(); final BaseObjectColumnValueSelector objectSelector = virtualColumns.makeColumnValueSelector("foo.5", null); final DimensionSelector dimensionSelector = virtualColumns.makeDimensionSelector( new DefaultDimensionSpec("foo.5", "x"), null ); final BaseFloatColumnValueSelector floatSelector = virtualColumns.makeColumnValueSelector("foo.5", null); final BaseLongColumnValueSelector longSelector = virtualColumns.makeColumnValueSelector("foo.5", null); Assert.assertEquals(5L, objectSelector.getObject()); Assert.assertEquals("5", dimensionSelector.lookupName(dimensionSelector.getRow().get(0))); Assert.assertEquals(5.0f, floatSelector.getFloat(), 0.0f); Assert.assertEquals(5L, longSelector.getLong()); }
@Test public void testMakeSelectorsWithDotSupportBaseNameOnly() { final VirtualColumns virtualColumns = makeVirtualColumns(); final BaseObjectColumnValueSelector objectSelector = virtualColumns.makeColumnValueSelector("foo", null); final DimensionSelector dimensionSelector = virtualColumns.makeDimensionSelector( new DefaultDimensionSpec("foo", "x"), null ); final BaseFloatColumnValueSelector floatSelector = virtualColumns.makeColumnValueSelector("foo", null); final BaseLongColumnValueSelector longSelector = virtualColumns.makeColumnValueSelector("foo", null); Assert.assertEquals(-1L, objectSelector.getObject()); Assert.assertEquals("-1", dimensionSelector.lookupName(dimensionSelector.getRow().get(0))); Assert.assertEquals(-1.0f, floatSelector.getFloat(), 0.0f); Assert.assertEquals(-1L, longSelector.getLong()); }