Search in sources :

Example 1 with QuantileDigestType

use of io.trino.spi.type.QuantileDigestType in project trino by trinodb.

the class MergeQuantileDigestFunction method specialize.

@Override
public AggregationMetadata specialize(BoundSignature boundSignature) {
    QuantileDigestType outputType = (QuantileDigestType) boundSignature.getReturnType();
    Type valueType = outputType.getValueType();
    QuantileDigestStateSerializer stateSerializer = new QuantileDigestStateSerializer(valueType);
    return new AggregationMetadata(INPUT_FUNCTION.bindTo(outputType), Optional.empty(), Optional.of(COMBINE_FUNCTION), OUTPUT_FUNCTION.bindTo(stateSerializer), ImmutableList.of(new AccumulatorStateDescriptor<>(QuantileDigestState.class, stateSerializer, new QuantileDigestStateFactory())));
}
Also used : Type(io.trino.spi.type.Type) TypeSignature.parametricType(io.trino.spi.type.TypeSignature.parametricType) QuantileDigestType(io.trino.spi.type.QuantileDigestType) QuantileDigestStateSerializer(io.trino.operator.aggregation.state.QuantileDigestStateSerializer) AccumulatorStateDescriptor(io.trino.operator.aggregation.AggregationMetadata.AccumulatorStateDescriptor) QuantileDigestStateFactory(io.trino.operator.aggregation.state.QuantileDigestStateFactory) QuantileDigestType(io.trino.spi.type.QuantileDigestType)

Example 2 with QuantileDigestType

use of io.trino.spi.type.QuantileDigestType in project trino by trinodb.

the class QuantileDigestAggregationFunction method specialize.

@Override
public AggregationMetadata specialize(BoundSignature boundSignature) {
    QuantileDigestType outputType = (QuantileDigestType) boundSignature.getReturnType();
    Type valueType = outputType.getValueType();
    int arity = boundSignature.getArity();
    QuantileDigestStateSerializer stateSerializer = new QuantileDigestStateSerializer(valueType);
    MethodHandle inputFunction = getMethodHandle(valueType, arity);
    inputFunction = normalizeInputMethod(inputFunction, boundSignature, ImmutableList.<AggregationParameterKind>builder().add(STATE).addAll(getInputTypes(valueType, arity).stream().map(ignored -> INPUT_CHANNEL).collect(Collectors.toList())).build());
    return new AggregationMetadata(inputFunction, Optional.empty(), Optional.of(COMBINE_FUNCTION), OUTPUT_FUNCTION.bindTo(stateSerializer), ImmutableList.of(new AccumulatorStateDescriptor<>(QuantileDigestState.class, stateSerializer, new QuantileDigestStateFactory())));
}
Also used : MethodHandle(java.lang.invoke.MethodHandle) QuantileDigest(io.airlift.stats.QuantileDigest) Signature.comparableTypeParameter(io.trino.metadata.Signature.comparableTypeParameter) AccumulatorStateDescriptor(io.trino.operator.aggregation.AggregationMetadata.AccumulatorStateDescriptor) MethodHandles.insertArguments(java.lang.invoke.MethodHandles.insertArguments) FunctionNullability(io.trino.metadata.FunctionNullability) Type(io.trino.spi.type.Type) DEFAULT_WEIGHT(io.trino.operator.scalar.QuantileDigestFunctions.DEFAULT_WEIGHT) QuantileDigestStateFactory(io.trino.operator.aggregation.state.QuantileDigestStateFactory) Float.intBitsToFloat(java.lang.Float.intBitsToFloat) QDIGEST(io.trino.spi.type.StandardTypes.QDIGEST) ImmutableList(com.google.common.collect.ImmutableList) TypeSignature.parametricType(io.trino.spi.type.TypeSignature.parametricType) FloatingPointBitsConverterUtil.floatToSortableInt(io.trino.operator.aggregation.FloatingPointBitsConverterUtil.floatToSortableInt) QuantileDigestStateSerializer(io.trino.operator.aggregation.state.QuantileDigestStateSerializer) Signature(io.trino.metadata.Signature) FunctionMetadata(io.trino.metadata.FunctionMetadata) TypeSignature(io.trino.spi.type.TypeSignature) AggregationFunctionAdapter.normalizeInputMethod(io.trino.operator.aggregation.AggregationFunctionAdapter.normalizeInputMethod) QuantileDigestFunctions.verifyWeight(io.trino.operator.scalar.QuantileDigestFunctions.verifyWeight) STATE(io.trino.operator.aggregation.AggregationFunctionAdapter.AggregationParameterKind.STATE) INPUT_CHANNEL(io.trino.operator.aggregation.AggregationFunctionAdapter.AggregationParameterKind.INPUT_CHANNEL) Collections.nCopies(java.util.Collections.nCopies) QuantileDigestType(io.trino.spi.type.QuantileDigestType) StandardTypes(io.trino.spi.type.StandardTypes) QuantileDigestState(io.trino.operator.aggregation.state.QuantileDigestState) FloatingPointBitsConverterUtil.doubleToSortableLong(io.trino.operator.aggregation.FloatingPointBitsConverterUtil.doubleToSortableLong) AGGREGATE(io.trino.metadata.FunctionKind.AGGREGATE) Collectors(java.util.stream.Collectors) DEFAULT_ACCURACY(io.trino.operator.scalar.QuantileDigestFunctions.DEFAULT_ACCURACY) String.format(java.lang.String.format) AggregationParameterKind(io.trino.operator.aggregation.AggregationFunctionAdapter.AggregationParameterKind) DOUBLE(io.trino.spi.type.DoubleType.DOUBLE) AggregationFunctionMetadata(io.trino.metadata.AggregationFunctionMetadata) List(java.util.List) QuantileDigestFunctions.verifyAccuracy(io.trino.operator.scalar.QuantileDigestFunctions.verifyAccuracy) BIGINT(io.trino.spi.type.BigintType.BIGINT) BoundSignature(io.trino.metadata.BoundSignature) Optional(java.util.Optional) BlockBuilder(io.trino.spi.block.BlockBuilder) SqlAggregationFunction(io.trino.metadata.SqlAggregationFunction) Reflection.methodHandle(io.trino.util.Reflection.methodHandle) Type(io.trino.spi.type.Type) TypeSignature.parametricType(io.trino.spi.type.TypeSignature.parametricType) QuantileDigestType(io.trino.spi.type.QuantileDigestType) QuantileDigestStateSerializer(io.trino.operator.aggregation.state.QuantileDigestStateSerializer) AccumulatorStateDescriptor(io.trino.operator.aggregation.AggregationMetadata.AccumulatorStateDescriptor) QuantileDigestStateFactory(io.trino.operator.aggregation.state.QuantileDigestStateFactory) QuantileDigestType(io.trino.spi.type.QuantileDigestType) MethodHandle(java.lang.invoke.MethodHandle)

Aggregations

AccumulatorStateDescriptor (io.trino.operator.aggregation.AggregationMetadata.AccumulatorStateDescriptor)2 QuantileDigestStateFactory (io.trino.operator.aggregation.state.QuantileDigestStateFactory)2 QuantileDigestStateSerializer (io.trino.operator.aggregation.state.QuantileDigestStateSerializer)2 QuantileDigestType (io.trino.spi.type.QuantileDigestType)2 Type (io.trino.spi.type.Type)2 TypeSignature.parametricType (io.trino.spi.type.TypeSignature.parametricType)2 ImmutableList (com.google.common.collect.ImmutableList)1 QuantileDigest (io.airlift.stats.QuantileDigest)1 AggregationFunctionMetadata (io.trino.metadata.AggregationFunctionMetadata)1 BoundSignature (io.trino.metadata.BoundSignature)1 AGGREGATE (io.trino.metadata.FunctionKind.AGGREGATE)1 FunctionMetadata (io.trino.metadata.FunctionMetadata)1 FunctionNullability (io.trino.metadata.FunctionNullability)1 Signature (io.trino.metadata.Signature)1 Signature.comparableTypeParameter (io.trino.metadata.Signature.comparableTypeParameter)1 SqlAggregationFunction (io.trino.metadata.SqlAggregationFunction)1 AggregationParameterKind (io.trino.operator.aggregation.AggregationFunctionAdapter.AggregationParameterKind)1 INPUT_CHANNEL (io.trino.operator.aggregation.AggregationFunctionAdapter.AggregationParameterKind.INPUT_CHANNEL)1 STATE (io.trino.operator.aggregation.AggregationFunctionAdapter.AggregationParameterKind.STATE)1 AggregationFunctionAdapter.normalizeInputMethod (io.trino.operator.aggregation.AggregationFunctionAdapter.normalizeInputMethod)1