Class DeclarativeAggregateFunction
- All Implemented Interfaces:
Serializable,org.apache.flink.table.functions.FunctionDefinition
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:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract org.apache.flink.table.expressions.Expression[]Expressions for accumulating the mutable aggregation buffer based on an input row.abstract UnresolvedReferenceExpression[]All fields of the aggregate buffer.abstract org.apache.flink.table.types.DataType[]All types of the aggregate buffer.org.apache.flink.table.functions.FunctionKindgetKind()abstract org.apache.flink.table.types.DataTypeThe result type of the function.org.apache.flink.table.types.inference.TypeInferencegetTypeInference(org.apache.flink.table.catalog.DataTypeFactory factory) abstract org.apache.flink.table.expressions.ExpressionAn expression which returns the final value for this aggregate function.abstract org.apache.flink.table.expressions.Expression[]Expressions for initializing empty aggregation buffers.abstract org.apache.flink.table.expressions.Expression[]A sequence of expressions for merging two aggregation buffers together.mergeOperand(UnresolvedReferenceExpression aggBuffer) Merge input ofmergeExpressions(), the input are AGG buffer generated by user definition.final UnresolvedReferenceExpression[]Merge inputs ofmergeExpressions(), these inputs are agg buffer generated by user definition.operand(int i) Arg of accumulate and retract, the input value (usually obtained from a new arrived data).abstract intHow many operands your function will deal with.final UnresolvedReferenceExpression[]operands()Args of accumulate and retract, the input value (usually obtained from a new arrived data).abstract org.apache.flink.table.expressions.Expression[]Expressions for retracting the mutable aggregation buffer based on an input row.Methods inherited from class org.apache.flink.table.functions.UserDefinedFunction
close, functionIdentifier, open, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.flink.table.functions.FunctionDefinition
getRequirements, isDeterministic, supportsConstantFolding
-
Constructor Details
-
DeclarativeAggregateFunction
public DeclarativeAggregateFunction()
-
-
Method Details
-
operandCount
public abstract int operandCount()How many operands your function will deal with. -
aggBufferAttributes
All fields of the aggregate buffer. -
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 syntaxattributeNameandmergeOperand(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
Args of accumulate and retract, the input value (usually obtained from a new arrived data). -
operand
Arg of accumulate and retract, the input value (usually obtained from a new arrived data). -
mergeOperand
Merge input ofmergeExpressions(), the input are AGG buffer generated by user definition. -
mergeOperands
Merge inputs ofmergeExpressions(), these inputs are agg buffer generated by user definition. -
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:
getTypeInferencein interfaceorg.apache.flink.table.functions.FunctionDefinition- Specified by:
getTypeInferencein classorg.apache.flink.table.functions.UserDefinedFunction
-