协作解析

默认情况下,Vertica 会在一个数据库节点上的单个线程中解析数据源。您可以选择使用协作解析,以在节点上使用多个线程来解析源。更具体地说,源中的数据将通过块分割器,块分割器会将源流中的块分组为逻辑单元。可以并行解析这些块。块分割器会将输入拆分为可单独解析的块,然后由解析器同时进行解析。协作解析仅适用于非隔离 UDx。(请参阅隔离和非隔离模式。)

要使用协作解析,块分割器必须能够在输入中找到记录结尾标记。并非在所有输入格式中都能找到这些标记。

块分割器由解析器工厂创建。在加载时,Vertica 会先调用 UDChunker 以将输入拆分为块,然后调用 UDParser 以解析每个块。

您可以单独或同时使用协作解析和分摊加载。请参阅组合协作解析和分摊加载

Vertica 如何拆分加载

当 Vertica 收到来自源的数据时,它会重复调用块分割器的 process() 方法。块分割器本质上是一个轻量级解析器。process() 方法用于将输入拆分为块,而不是进行解析。

块分割器完成将输入拆分为块后,Vertica 会将这些块发送到尽可能多的可用解析器,从而在解析器上调用 process() 方法。

实施协作解析

要实施协作解析,请执行以下操作:

  • 子类化 UDChunker 并实施 process()

  • ParserFactory 中,实施 prepareChunker() 以返回 UDChunker

请参阅 C++ 示例:分隔解析器和块分割器以了解同样支持分摊加载的 UDChunker