AggregateFunction 类

AggregateFunction 类可执行聚合。它会计算存储相关数据的每个数据库节点上的值,然后组合各个节点中的结果。您必须实施以下方法:

  • initAggregate() - 初始化类、定义变量以及设置变量的起始值。此函数必须是等幂的。

  • aggregate() - 在每个节点上执行的主要聚合操作。

  • combine() - 如果需要多次调用 aggregate(),Vertica 会调用 combine() 以将所有子聚合合并为最终的聚合。虽然不可能调用此方法,但您必须定义此方法。

  • terminate() - 终止函数并以列的形式返回结果。

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);