协作解析
默认情况下,Vertica 会在一个数据库节点上的单个线程中解析数据源。您可以选择使用协作解析,以在节点上使用多个线程来解析源。更具体地说,源中的数据将通过块分割器,块分割器会将源流中的块分组为逻辑单元。可以并行解析这些块。块分割器会将输入拆分为可单独解析的块,然后由解析器同时进行解析。协作解析仅适用于非隔离 UDx。(请参阅隔离和非隔离模式。)
要使用协作解析,块分割器必须能够在输入中找到记录结尾标记。并非在所有输入格式中都能找到这些标记。
块分割器由解析器工厂创建。在加载时,Vertica 会先调用 UDChunker
以将输入拆分为块,然后调用 UDParser
以解析每个块。
您可以单独或同时使用协作解析和分摊加载。请参阅组合协作解析和分摊加载。
Vertica 如何拆分加载
当 Vertica 收到来自源的数据时,它会重复调用块分割器的 process()
方法。块分割器本质上是一个轻量级解析器。process()
方法用于将输入拆分为块,而不是进行解析。
块分割器完成将输入拆分为块后,Vertica 会将这些块发送到尽可能多的可用解析器,从而在解析器上调用 process()
方法。
实施协作解析
要实施协作解析,请执行以下操作:
-
子类化
UDChunker
并实施process()
。 -
在
ParserFactory
中,实施prepareChunker()
以返回UDChunker
。
请参阅 C++ 示例:分隔解析器和块分割器以了解同样支持分摊加载的 UDChunker
。