@PublicEvolving
public abstract class DeclarativeAggregateFunction
extends org.apache.flink.table.functions.UserDefinedFunction
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
.
Constructor and Description |
---|
DeclarativeAggregateFunction() |
Modifier and Type | Method and 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 of
mergeExpressions() , the input are AGG buffer generated by user
definition. |
UnresolvedReferenceExpression[] |
mergeOperands()
Merge inputs of
mergeExpressions() , 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.
|
close, functionIdentifier, open, toString
public abstract int operandCount()
public abstract UnresolvedReferenceExpression[] aggBufferAttributes()
public abstract org.apache.flink.table.types.DataType[] getAggBufferTypes()
public abstract org.apache.flink.table.types.DataType getResultType()
public abstract org.apache.flink.table.expressions.Expression[] initialValuesExpressions()
public abstract org.apache.flink.table.expressions.Expression[] accumulateExpressions()
public abstract org.apache.flink.table.expressions.Expression[] retractExpressions()
public abstract org.apache.flink.table.expressions.Expression[] mergeExpressions()
attributeName
and mergeOperand(attributeName)
to refer to the attributes corresponding to each of the buffers
being merged.public abstract org.apache.flink.table.expressions.Expression getValueExpression()
public final UnresolvedReferenceExpression[] operands()
public final UnresolvedReferenceExpression operand(int i)
public final UnresolvedReferenceExpression mergeOperand(UnresolvedReferenceExpression aggBuffer)
mergeExpressions()
, the input are AGG buffer generated by user
definition.public final UnresolvedReferenceExpression[] mergeOperands()
mergeExpressions()
, these inputs are agg buffer generated by user
definition.public org.apache.flink.table.functions.FunctionKind getKind()
public org.apache.flink.table.types.inference.TypeInference getTypeInference(org.apache.flink.table.catalog.DataTypeFactory factory)
getTypeInference
in interface org.apache.flink.table.functions.FunctionDefinition
getTypeInference
in class org.apache.flink.table.functions.UserDefinedFunction
Copyright © 2014–2023 The Apache Software Foundation. All rights reserved.