AggregateFunction 类
AggregateFunction
类可执行聚合。它会计算存储相关数据的每个数据库节点上的值,然后组合各个节点中的结果。您必须实施以下方法:
-
initAggregate()
- 初始化类、定义变量以及设置变量的起始值。此函数必须是等幂的。 -
aggregate()
- 在每个节点上执行的主要聚合操作。 -
combine()
- 如果需要多次调用aggregate()
,Vertica 会调用combine()
以将所有子聚合合并为最终的聚合。虽然不可能调用此方法,但您必须定义此方法。 -
terminate()
- 终止函数并以列的形式返回结果。
重要
aggregate()
函数可能无法同时对整个输入集执行操作。因此,initAggregate()
必须是等幂的。
AggregateFunction
类还提供了以下两种可选方法,您可以实施这两种方法以分配和释放资源: setup()
和 destroy()
。您应使用这些方法来分配和取消分配那些不通过 UDAF API 分配的资源(有关详细信息,请参阅为 UDx 分配资源)。
API
仅 C++ 支持聚合函数。
AggregateFunction API 提供了以下通过子类扩展的方法:
virtual void setup(ServerInterface &srvInterface,
const SizedColumnTypes &argTypes);
virtual void initAggregate(ServerInterface &srvInterface, IntermediateAggs &aggs)=0;
void aggregate(ServerInterface &srvInterface, BlockReader &arg_reader,
IntermediateAggs &aggs);
virtual void combine(ServerInterface &srvInterface, IntermediateAggs &aggs_output,
MultipleIntermediateAggs &aggs_other)=0;
virtual void terminate(ServerInterface &srvInterface, BlockWriter &res_writer,
IntermediateAggs &aggs);
virtual void cancel(ServerInterface &srvInterface);
virtual void destroy(ServerInterface &srvInterface, const SizedColumnTypes &argTypes);