缓冲区类
缓冲区类可用作所有 UDL 函数的原始数据流的句柄。C++ 和 Java API 对输入和输出使用单个 DataBuffer
类。Python API 包含两个类:InputBuffer
和 OutputBuffer
。
DataBuffer API(C++、java)
DataBuffer 类具有指向缓冲区和大小的指针,以及指示已使用的流量的偏移量。
DataBuffer 类具有可指示已使用的流量的偏移量。因为 Java 是一种其字符串需要注意字符编码的语言,所以 UDx 必须对缓冲区进行解码或编码。解析器可以通过直接访问缓冲区来与流交互。
InputBuffer API 和 OutputBuffer API (Python)
Python
InputBuffer 和
OutputBuffer 类会取代 C++ 和 Java API 中的 DataBuffer
类。
InputBuffer 类
InputBuffer 类会根据指定的编码来解码和转换原始数据流。Python 原本就支持各种语言和编解码器。InputBuffer 是 UDFilters 和 UDParsers 的 process()
方法的实参。用户会通过调用 InputBuffer 的方法来与 UDL 的数据流进行交互
如果没有为 setEncoding()
指定值,Vertica 会假设值为 NONE。
OutputBuffer 类
OutputBuffer 类会对 Python 中的数据进行编码并输出到 Vertica。OutputBuffer 是 UDFilters 和 UDParsers 的 process()
方法的实参。用户会通过调用 OutputBuffer 的方法来操作数据并进行编码,从而与 UDL 的数据流进行交互。
write()
方法会将所有数据从 Python 客户端传输到 Vertica。输出缓冲区可以接受任何大小的对象。如果用户向 OutputBuffer 写入的对象大于 Vertica 可以立即处理的大小,则 Vertica 会存储溢出。在下一次调用 process()
期间,Vertica 会检查剩余数据。如果有剩余数据,Vertica 会先将其复制到 DataBuffer,然后再确定是否需要从 Python UDL 调用 process()
。
如果没有为 setEncoding()
指定值,Vertica 会假设值为 NONE。