@Override public void aggregate() { SerializablePairLongString pair = (SerializablePairLongString) selector.getObject(); if (pair != null && pair.lhs >= lastTime) { lastTime = pair.lhs; lastValue = pair.rhs; } } };
@Nullable static Supplier<Object> supplierFromObjectSelector(final BaseObjectColumnValueSelector<?> selector) { if (selector instanceof NilColumnValueSelector) { return null; } final Class<?> clazz = selector.classOfObject(); if (Number.class.isAssignableFrom(clazz) || String.class.isAssignableFrom(clazz)) { // Number, String supported as-is. return selector::getObject; } else if (clazz.isAssignableFrom(Number.class) || clazz.isAssignableFrom(String.class)) { // Might be Numbers and Strings. Use a selector that double-checks. return () -> { final Object val = selector.getObject(); if (val instanceof Number || val instanceof String) { return val; } else { return null; } }; } else { // No numbers or strings. return null; } } }
@Override public Aggregator factorize(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@Override public BufferAggregator factorizeBuffered(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopBufferAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesBufferAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@Override public void aggregate() { SerializablePairLongString pair = (SerializablePairLongString) selector.getObject(); if (pair != null && pair.lhs < firstTime) { firstTime = pair.lhs; firstValue = pair.rhs; } } };
@Nullable static Supplier<Object> supplierFromObjectSelector(final BaseObjectColumnValueSelector<?> selector) { if (selector instanceof NilColumnValueSelector) { return null; } final Class<?> clazz = selector.classOfObject(); if (Number.class.isAssignableFrom(clazz) || String.class.isAssignableFrom(clazz)) { // Number, String supported as-is. return selector::getObject; } else if (clazz.isAssignableFrom(Number.class) || clazz.isAssignableFrom(String.class)) { // Might be Numbers and Strings. Use a selector that double-checks. return () -> { final Object val = selector.getObject(); if (val instanceof Number || val instanceof String) { return val; } else { return null; } }; } else { // No numbers or strings. return null; } } }
@Override public Aggregator factorize(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@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 BufferAggregator factorizeBuffered(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopBufferAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesBufferAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@Override public void aggregate() { VarianceAggregatorCollector.combineValues(holder, selector.getObject()); } }
@Override public void aggregate() { Long value = TimestampAggregatorFactory.convertLong(timestampSpec, selector.getObject()); if (value != null) { most = comparator.compare(most, value) > 0 ? most : value; } }
/** * 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(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() { long time = timeSelector.getLong(); if (time >= lastTime) { lastTime = time; Object value = valueSelector.getObject(); if (value != null) { if (value instanceof String) { lastValue = (String) value; } else if (value instanceof SerializablePairLongString) { lastValue = ((SerializablePairLongString) value).rhs; } else { throw new ISE( "Try to aggregate unsuported class type [%s].Supported class types: String or SerializablePairLongString", value.getClass().getCanonicalName() ); } if (lastValue != null && lastValue.length() > maxStringBytes) { lastValue = lastValue.substring(0, maxStringBytes); } } else { lastValue = null; } } }
@Override public void aggregate() { long time = timeSelector.getLong(); if (time < firstTime) { firstTime = time; Object value = valueSelector.getObject(); if (value != null) { if (value instanceof String) { firstValue = (String) value; } else if (value instanceof SerializablePairLongString) { firstValue = ((SerializablePairLongString) value).rhs; } else { throw new ISE( "Try to aggregate unsuported class type [%s].Supported class types: String or SerializablePairLongString", value.getClass().getCanonicalName() ); } if (firstValue != null && firstValue.length() > maxStringBytes) { firstValue = firstValue.substring(0, maxStringBytes); } } else { firstValue = null; } } }