MultiPhaseTransformFunctionFactory 类
使用多阶段 UDTF,您可以将数据处理分为多个步骤。使用此功能后,您的 UDTF 可以使用类似于 Hadoop 或其他 MapReduce 框架的方式执行处理。您可以使用第一阶段来分解并收集数据,然后使用后续阶段来处理数据。例如,您的 UDTF 的第一阶段可以是从存储在表列的 Web 服务器日志中提取特定类型的用户交互,而且后续阶段可以是对这些交互执行分析。
多阶段 UDTF 还能让您决定在什么地方进行处理:在每个节点本地,还是在整个群集内。如果您的多阶段 UDTF 类似于 MapReduce 流程,您可能希望在多阶段 UDTF 的第一阶段处理存储在本地(运行 UDTF 实例的节点)的数据。这样可防止在 Vertica 群集中复制较大的数据段。根据在后续阶段执行的处理类型,您可以选择对数据进行分段并分布在 Vertica 群集中。
UDTF 的每个阶段都与传统(单阶段)UDTF 相同:它可以接收作为输入的表,然后生成作为输出的表。每个阶段的输出的架构不需要与其输入匹配,而且每个阶段可以根据需要输出大量或少量行。
要定义由每个阶段执行的处理,请创建 TransformFunction
的子类。如果已从单阶段 UDTF(用于执行您希望多阶段 UDTF 的其中一个阶段执行的处理)创建了 TransformFunction
,则您可以轻松调整该子类以使其在多阶段 UDTF 中工作。
多阶段 UDTF 和传统 UDTF 不同之处是所使用的工厂类。应使用 MultiPhaseTransformFunctionFactory
的子类定义多阶段 UDTF,而非 TransformFunctionFactory
。此特殊工厂类用作多步骤 UDTF 中所有阶段的容器。此工厂类通过 getPrototype()
函数向 Vertica 提供整个多阶段 UDTF 的输入要求和输出要求,以及该 UDTF 中所有阶段的列表。
在 MultiPhaseTransformFunctionFactory
类的子类中,可以定义 TransformFunctionPhase
的一个或多个子类。对于多阶段 UDTF 中的每个阶段,这些类充当与 TransformFunctionFactory
类相同的角色。这些类定义每个阶段的输入和输出并创建其关联的 TransformFunction
类的实例,以对 UDTF 的每个阶段执行处理。除了这些子类之外,MultiPhaseTransformFunctionFactory
还包含可用于控制每个 TransformFunctionPhase
子类的实例的字段。
API
MultiPhaseTransformFunctionFactory
类扩展了 TransformFunctionFactory
API 提供了以下其他方法以通过子类扩展:
virtual void getPhases(ServerInterface &srvInterface,
std::vector< TransformFunctionPhase * > &phases)=0;
如果使用该工厂,则还必须扩展 TransformFunctionPhase
。请参阅 SDK 参考文档。
MultiPhaseTransformFunctionFactory 类扩展了 TransformFunctionFactory
。API 提供了以下通过子类扩展的方法:
public abstract void getPhases(ServerInterface srvInterface,
Vector< TransformFunctionPhase > phases);
如果使用该工厂,则还必须扩展 TransformFunctionPhase
。请参阅 SDK 参考文档。
TransformFunctionFactory 类扩展了 TransformFunctionFactory
。对于每个阶段,工厂必须定义可扩展 TransformFunctionPhase
的类。
工厂将添加以下方法:
def getPhase(cls, srv)
TransformFunctionPhase
包含以下方法:
def createTransformFunction(cls, srv)
def getReturnType(self, srv_interface, input_types, output_types)