Class DeclarativeAggregateFunction

  • All Implemented Interfaces:
    Serializable, org.apache.flink.table.functions.FunctionDefinition

    @PublicEvolving
    public abstract class DeclarativeAggregateFunction
    extends org.apache.flink.table.functions.UserDefinedFunction
    API for aggregation functions that are expressed in terms of expressions.

    When implementing a new expression-based aggregate function, you should first decide how many operands your function will have by implementing operandCount() method. And then you can use operand(int) fields to represent your operand, like `operand(0)`, `operand(2)`.

    Then you should declare all your buffer attributes by implementing aggBufferAttributes(). You should declare all buffer attributes as UnresolvedReferenceExpression, and make sure the name of your attributes are unique within the function and it should not conflict with operandIndex. You can then use these attributes when defining initialValuesExpressions(), accumulateExpressions(), mergeExpressions() and getValueExpression().

    Note: Developer of DeclarativeAggregateFunction should guarantee that the inferred type of getValueExpression() is the same as getResultType()

    See an full example: AvgAggFunction.

    See Also:
    Serialized Form
    • Constructor Detail

      • DeclarativeAggregateFunction

        public DeclarativeAggregateFunction()
    • Method Detail

      • operandCount

        public abstract int operandCount()
        How many operands your function will deal with.
      • getAggBufferTypes

        public abstract org.apache.flink.table.types.DataType[] getAggBufferTypes()
        All types of the aggregate buffer.
      • getResultType

        public abstract org.apache.flink.table.types.DataType getResultType()
        The result type of the function.
      • initialValuesExpressions

        public abstract org.apache.flink.table.expressions.Expression[] initialValuesExpressions()
        Expressions for initializing empty aggregation buffers.
      • accumulateExpressions

        public abstract org.apache.flink.table.expressions.Expression[] accumulateExpressions()
        Expressions for accumulating the mutable aggregation buffer based on an input row.
      • retractExpressions

        public abstract org.apache.flink.table.expressions.Expression[] retractExpressions()
        Expressions for retracting the mutable aggregation buffer based on an input row.
      • mergeExpressions

        public abstract org.apache.flink.table.expressions.Expression[] mergeExpressions()
        A sequence of expressions for merging two aggregation buffers together. When defining these expressions, you can use the syntax attributeName and mergeOperand(attributeName) to refer to the attributes corresponding to each of the buffers being merged.
      • getValueExpression

        public abstract org.apache.flink.table.expressions.Expression getValueExpression()
        An expression which returns the final value for this aggregate function.
      • operands

        public final UnresolvedReferenceExpression[] operands()
        Args of accumulate and retract, the input value (usually obtained from a new arrived data).
      • operand

        public final UnresolvedReferenceExpression operand​(int i)
        Arg of accumulate and retract, the input value (usually obtained from a new arrived data).
      • getKind

        public org.apache.flink.table.functions.FunctionKind getKind()
      • getTypeInference

        public org.apache.flink.table.types.inference.TypeInference getTypeInference​(org.apache.flink.table.catalog.DataTypeFactory factory)
        Specified by:
        getTypeInference in interface org.apache.flink.table.functions.FunctionDefinition
        Specified by:
        getTypeInference in class org.apache.flink.table.functions.UserDefinedFunction