public abstract class DeclarativeAggregateFunction extends 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 Expression[] |
accumulateExpressions()
Expressions for accumulating the mutable aggregation buffer based on an input row.
|
abstract UnresolvedReferenceExpression[] |
aggBufferAttributes()
All fields of the aggregate buffer.
|
abstract DataType[] |
getAggBufferTypes()
All types of the aggregate buffer.
|
FunctionKind |
getKind()
Returns the kind of function this definition describes.
|
abstract DataType |
getResultType()
The result type of the function.
|
abstract Expression |
getValueExpression()
An expression which returns the final value for this aggregate function.
|
abstract Expression[] |
initialValuesExpressions()
Expressions for initializing empty aggregation buffers.
|
abstract 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 Expression[] |
retractExpressions()
Expressions for retracting the mutable aggregation buffer based on an input row.
|
close, functionIdentifier, open, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getRequirements, isDeterministic
public abstract int operandCount()
public abstract UnresolvedReferenceExpression[] aggBufferAttributes()
public abstract DataType[] getAggBufferTypes()
public abstract DataType getResultType()
public abstract Expression[] initialValuesExpressions()
public abstract Expression[] accumulateExpressions()
public abstract Expression[] retractExpressions()
public abstract Expression[] mergeExpressions()
attributeName
and
mergeOperand(attributeName)
to refer to the attributes corresponding to each of
the buffers being merged.public abstract 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 final FunctionKind getKind()
FunctionDefinition
Copyright © 2014–2020 The Apache Software Foundation. All rights reserved.