@AggregationFunction("count_if") public final class CountIfAggregation { private CountIfAggregation() {} @InputFunction public static void input(@AggregationState LongState state, @SqlType(StandardTypes.BOOLEAN) boolean value) { if (value) { state.setLong(state.getLong() + 1); } } @CombineFunction public static void combine(@AggregationState LongState state, @AggregationState LongState otherState) { state.setLong(state.getLong() + otherState.getLong()); } @OutputFunction(StandardTypes.BIGINT) public static void output(@AggregationState LongState state, BlockBuilder out) { BIGINT.writeLong(out, state.getLong()); } }
@AggregationFunction("count") public final class CountAggregation { private CountAggregation() { } @InputFunction public static void input(@AggregationState LongState state) { state.setLong(state.getLong() + 1); } @CombineFunction public static void combine(@AggregationState LongState state, @AggregationState LongState otherState) { state.setLong(state.getLong() + otherState.getLong()); } @OutputFunction(StandardTypes.BIGINT) public static void output(@AggregationState LongState state, BlockBuilder out) { BIGINT.writeLong(out, state.getLong()); } }
@AggregationFunction(value = NAME, decomposable = false) public class SpatialPartitioningAggregateFunction { public static final String NAME = "spatial_partitioning"; private SpatialPartitioningAggregateFunction() {} @InputFunction public static void input(SpatialPartitioningState state, @SqlType(GEOMETRY_TYPE_NAME) Slice slice) { throw new UnsupportedOperationException("spatial_partitioning(geometry, samplingPercentage) aggregate function should be re-written into spatial_partitioning(geometry, samplingPercentage, partitionCount)"); } @CombineFunction public static void combine(SpatialPartitioningState state, SpatialPartitioningState otherState) { throw new UnsupportedOperationException("spatial_partitioning(geometry, samplingPercentage) aggregate function should be re-written into spatial_partitioning(geometry, samplingPercentage, partitionCount)"); } @OutputFunction(StandardTypes.VARCHAR) public static void output(SpatialPartitioningState state, BlockBuilder out) { throw new UnsupportedOperationException("spatial_partitioning(geometry, samplingPercentage) aggregate function should be re-written into spatial_partitioning(geometry, samplingPercentage, partitionCount)"); } }
@AggregationFunction("simple_exact_aggregate_aggregation_state_moved") @Description("Simple exact function which has @AggregationState on different than first positions") public static class StateOnDifferentThanFirstPositionAggregationFunction { @InputFunction public static void input(@SqlType(DOUBLE) double value, @AggregationState NullableDoubleState state) { // noop this is only for annotation testing puproses } @CombineFunction public static void combine(@AggregationState NullableDoubleState combine1, @AggregationState NullableDoubleState combine2) { // noop this is only for annotation testing puproses } @OutputFunction(DOUBLE) public static void output(BlockBuilder out, @AggregationState NullableDoubleState state) { // noop this is only for annotation testing puproses } }
@AggregationFunction("covar_samp") @OutputFunction(StandardTypes.REAL) public static void covarSamp(@AggregationState CovarianceState state, BlockBuilder out) { if (state.getCount() <= 1) { out.appendNull(); } else { double result = getCovarianceSample(state); REAL.writeLong(out, Float.floatToRawIntBits((float) result)); } }
@AggregationFunction("regr_slope") @OutputFunction(StandardTypes.REAL) public static void regrSlope(@AggregationState RegressionState state, BlockBuilder out) { double result = getRegressionSlope(state); if (Double.isFinite(result)) { REAL.writeLong(out, floatToRawIntBits((float) result)); } else { out.appendNull(); } }
@AggregationFunction("regr_intercept") @OutputFunction(StandardTypes.REAL) public static void regrIntercept(@AggregationState RegressionState state, BlockBuilder out) { double result = getRegressionIntercept(state); if (Double.isFinite(result)) { REAL.writeLong(out, floatToRawIntBits((float) result)); } else { out.appendNull(); } } }
@AggregationFunction("covar_pop") @OutputFunction(StandardTypes.REAL) public static void covarPop(@AggregationState CovarianceState state, BlockBuilder out) { if (state.getCount() == 0) { out.appendNull(); } else { double result = getCovariancePopulation(state); REAL.writeLong(out, Float.floatToRawIntBits((float) result)); } } }
@AggregationFunction(value = "skewness") @Description("Returns the skewness of the argument") @OutputFunction(StandardTypes.DOUBLE) public static void skewness(@AggregationState CentralMomentsState state, BlockBuilder out) { long n = state.getCount(); if (n < 3) { out.appendNull(); } else { double result = Math.sqrt(n) * state.getM3() / Math.pow(state.getM2(), 1.5); DOUBLE.writeDouble(out, result); } }
@AggregationFunction("multi_output_aggregate_2") @OutputFunction(DOUBLE) public static void output2( @AggregationState NullableDoubleState state, BlockBuilder out) { // noop this is only for annotation testing puproses } }
@AggregationFunction("regr_slope") @OutputFunction(StandardTypes.DOUBLE) public static void regrSlope(@AggregationState RegressionState state, BlockBuilder out) { double result = getRegressionSlope(state); if (Double.isFinite(result)) { DOUBLE.writeDouble(out, result); } else { out.appendNull(); } }
@AggregationFunction(value = "stddev", alias = "stddev_samp") @Description("Returns the sample standard deviation of the argument") @OutputFunction(StandardTypes.DOUBLE) public static void stddev(@AggregationState VarianceState state, BlockBuilder out) { long count = state.getCount(); if (count < 2) { out.appendNull(); } else { double m2 = state.getM2(); double result = m2 / (count - 1); result = Math.sqrt(result); DOUBLE.writeDouble(out, result); } }
@AggregationFunction("stddev_pop") @Description("Returns the population standard deviation of the argument") @OutputFunction(StandardTypes.DOUBLE) public static void stddevPop(@AggregationState VarianceState state, BlockBuilder out) { long count = state.getCount(); if (count == 0) { out.appendNull(); } else { double m2 = state.getM2(); double result = m2 / count; result = Math.sqrt(result); DOUBLE.writeDouble(out, result); } } }
@AggregationFunction("covar_pop") @OutputFunction(StandardTypes.DOUBLE) public static void covarPop(@AggregationState CovarianceState state, BlockBuilder out) { if (state.getCount() == 0) { out.appendNull(); } else { double result = getCovariancePopulation(state); DOUBLE.writeDouble(out, result); } } }
@AggregationFunction("covar_samp") @OutputFunction(StandardTypes.DOUBLE) public static void covarSamp(@AggregationState CovarianceState state, BlockBuilder out) { if (state.getCount() <= 1) { out.appendNull(); } else { double result = getCovarianceSample(state); DOUBLE.writeDouble(out, result); } }
@AggregationFunction("regr_intercept") @OutputFunction(StandardTypes.DOUBLE) public static void regrIntercept(@AggregationState RegressionState state, BlockBuilder out) { double result = getRegressionIntercept(state); if (Double.isFinite(result)) { DOUBLE.writeDouble(out, result); } else { out.appendNull(); } } }
@AggregationFunction("multi_output_aggregate_1") @Description("Simple multi output function aggregate specialized description") @OutputFunction(DOUBLE) public static void output1( @AggregationState NullableDoubleState state, BlockBuilder out) { // noop this is only for annotation testing puproses }
@AggregationFunction(value = "variance", alias = "var_samp") @Description("Returns the sample variance of the argument") @OutputFunction(StandardTypes.DOUBLE) public static void variance(@AggregationState VarianceState state, BlockBuilder out) { long count = state.getCount(); if (count < 2) { out.appendNull(); } else { double m2 = state.getM2(); double result = m2 / (count - 1); DOUBLE.writeDouble(out, result); } }
@AggregationFunction("var_pop") @Description("Returns the population variance of the argument") @OutputFunction(StandardTypes.DOUBLE) public static void variancePop(@AggregationState VarianceState state, BlockBuilder out) { long count = state.getCount(); if (count == 0) { out.appendNull(); } else { double m2 = state.getM2(); double result = m2 / count; DOUBLE.writeDouble(out, result); } }
@AggregationFunction(value = "kurtosis") @Description("Returns the (excess) kurtosis of the argument") @OutputFunction(StandardTypes.DOUBLE) public static void kurtosis(@AggregationState CentralMomentsState state, BlockBuilder out) { double n = state.getCount(); if (n < 4) { out.appendNull(); } else { double m2 = state.getM2(); double m4 = state.getM4(); double result = ((n - 1) * n * (n + 1)) / ((n - 2) * (n - 3)) * m4 / (m2 * m2) - 3 * ((n - 1) * (n - 1)) / ((n - 2) * (n - 3)); DOUBLE.writeDouble(out, result); } } }