Class DeclarativeAggregateFunction
- java.lang.Object
-
- org.apache.flink.table.functions.UserDefinedFunction
-
- org.apache.flink.table.functions.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 useoperand(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 asUnresolvedReferenceExpression
, 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 defininginitialValuesExpressions()
,accumulateExpressions()
,mergeExpressions()
andgetValueExpression()
.Note: Developer of DeclarativeAggregateFunction should guarantee that the inferred type of
getValueExpression()
is the same asgetResultType()
See an full example:
AvgAggFunction
.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description DeclarativeAggregateFunction()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract org.apache.flink.table.expressions.Expression[]
accumulateExpressions()
Expressions for accumulating the mutable aggregation buffer based on an input row.abstract UnresolvedReferenceExpression[]
aggBufferAttributes()
All fields of the aggregate buffer.abstract org.apache.flink.table.types.DataType[]
getAggBufferTypes()
All types of the aggregate buffer.org.apache.flink.table.functions.FunctionKind
getKind()
abstract org.apache.flink.table.types.DataType
getResultType()
The result type of the function.org.apache.flink.table.types.inference.TypeInference
getTypeInference(org.apache.flink.table.catalog.DataTypeFactory factory)
abstract org.apache.flink.table.expressions.Expression
getValueExpression()
An expression which returns the final value for this aggregate function.abstract org.apache.flink.table.expressions.Expression[]
initialValuesExpressions()
Expressions for initializing empty aggregation buffers.abstract org.apache.flink.table.expressions.Expression[]
mergeExpressions()
A sequence of expressions for merging two aggregation buffers together.UnresolvedReferenceExpression
mergeOperand(UnresolvedReferenceExpression aggBuffer)
Merge input ofmergeExpressions()
, the input are AGG buffer generated by user definition.UnresolvedReferenceExpression[]
mergeOperands()
Merge inputs ofmergeExpressions()
, these inputs are agg buffer generated by user definition.UnresolvedReferenceExpression
operand(int i)
Arg of accumulate and retract, the input value (usually obtained from a new arrived data).abstract int
operandCount()
How many operands your function will deal with.UnresolvedReferenceExpression[]
operands()
Args of accumulate and retract, the input value (usually obtained from a new arrived data).abstract org.apache.flink.table.expressions.Expression[]
retractExpressions()
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, toString
-
-
-
-
Method Detail
-
operandCount
public abstract int operandCount()
How many operands your function will deal with.
-
aggBufferAttributes
public abstract UnresolvedReferenceExpression[] 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 syntaxattributeName
andmergeOperand(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).
-
mergeOperand
public final UnresolvedReferenceExpression mergeOperand(UnresolvedReferenceExpression aggBuffer)
Merge input ofmergeExpressions()
, the input are AGG buffer generated by user definition.
-
mergeOperands
public final UnresolvedReferenceExpression[] 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:
getTypeInference
in interfaceorg.apache.flink.table.functions.FunctionDefinition
- Specified by:
getTypeInference
in classorg.apache.flink.table.functions.UserDefinedFunction
-
-