AnalyticFunction 类

AnalyticFunction 类可执行分析处理。子类必须定义用于执行操作的 processPartition() 方法。该类可定义多种方法以设置和分解该函数。

执行操作

processPartition() 方法可读取数据分区,执行某种处理,以及为每个输入行输出单个值。

Vertica 将为每个数据分区调用 processPartition() 一次。它使用 AnalyticPartitionReader 对象来提供分区,您可以从该对象读取输入数据。此外,该对象上存在名为 isNewOrderByKey() 的唯一方法,此方法可返回布尔值以指示函数是否已发现具有一个或多个相同 ORDER BY 键的行。此方法对分析函数(例如示例 RANK 函数)很有用,分析函数需要以不同方式处理具有相同 ORDER BY 键的行和具有不同 ORDER BY 键的行。

方法已完成处理数据行之后,您可以通过对 AnalyticPartitionReader 调用 next() 使其前进到下一个输入行。

方法使用 Vertica 作为参数提供给 processPartition()AnalyticPartitionWriter 对象来写入输出值。此对象具有特定于数据类型的方法(例如 setInt())用于写入输出值。设置输出值之后,对 AnalyticPartitionWriter 调用 next() 以前进到下一个输出行。

设置和分解

AnalyticFunction 类定义了两种其他方法,您可以选择性地实施这两种方法以分配和释放资源: setup()destroy()。您应使用这些方法来分配和取消分配那些不通过 UDx API 分配的资源(有关详细信息,请参阅为 UDx 分配资源)。

API

AnalyticFunction API 提供了以下通过子类扩展的方法:

virtual void setup(ServerInterface &srvInterface,
        const SizedColumnTypes &argTypes);

virtual void processPartition (ServerInterface &srvInterface,
        AnalyticPartitionReader &input_reader,
        AnalyticPartitionWriter &output_writer)=0;

virtual void cancel(ServerInterface &srvInterface);

virtual void destroy(ServerInterface &srvInterface, const SizedColumnTypes &argTypes);

AnalyticFunction API 提供了以下通过子类扩展的方法:

public void setup(ServerInterface srvInterface, SizedColumnTypes argTypes);

public abstract void processPartition (ServerInterface srvInterface,
        AnalyticPartitionReader input_reader, AnalyticPartitionWriter output_writer)
        throws UdfException, DestroyInvocation;

protected void cancel(ServerInterface srvInterface);

public void destroy(ServerInterface srvInterface, SizedColumnTypes argTypes);