PROTOCOL_ARROW

Apache Arrow 协议是一种用于对大型数据集进行序列化和反序列化的协议,可以跨平台、跨语言地进行高效数据传输。DolphinDB 提供的 Arrow 插件在 Apache Arrow 协议的基础上进行类型适配,实现 DolphinDB 和 API 之间通过 Apache Arrow 协议进行数据传输。用户在安装 Arrow 插件后方可使用 Apache Arrow 协议进行传输。

注意:若用户未安装 Arrow 插件,即便已指定启用 PROTOCOL_ARROW 协议,API 将默认使用 PROTOCOL_DDB 协议进行传输,并返回 DataFrame。

PROTOCOL_ARROW 数据形式支持表

对于 API 而言,PROTOCOL_ARROW 协议目前仅支持 Table 型数据的反序列化,且不支持开启压缩模式。

附加参数数据形式序列化反序列化
Table不支持支持

启用 PROTOCOL_ARROW

如果使用 PROTOCOL_ARROW 协议,须安装 Arrow 插件 和 9.0.0 以上版本的 pyarrow

在以下示例中,session 和 DBConnectionPool 通过设置参数 protocol 指定启用 PROTOCOL_ARROW 协议。

import dolphindb as ddb
import dolphindb.settings as keys

s = ddb.session(protocol=keys.PROTOCOL_ARROW)
s.connect("localhost", 8848, "admin", "123456")

pool = ddb.DBConnectionPool("localhost", 8848, "admin", "123456", 10, protocol=keys.PROTOCOL_ARROW)

反序列化 DolphinDB -> Python

Table

使用 PROTOCOL_ARROW 协议时,DolphinDB 中的 Table 对应 Python 中的 pyarrow.Table。详细类型转换的对照信息如下表所示:

DolphinDB类型Arrow类型
BOOLboolean
CHARint8
SHORTint16
INTint32
LONGint64
DATEdate32
MONTHdate32
TIMEtime32(ms)
MINUTEtime32(s)
SECONDtime32(s)
DATETIMEtimestamp(s)
TIMESTAMPtimestamp(ms)
NANOTIMEtime64(ns)
NANOTIMESTAMPtimestamp(ns)
DATEHOURtimestamp(s)
FLOATfloat32
DOUBLEfloat64
SYMBOLdictionary(int32, utf8)
STRINGutf8
IPADDRutf8
UUIDfixed_size_binary(16)
INT128fixed_size_binary(16)
BLOBlarge_binary
DECIMAL32(X)decimal128(38, X)
DECIMAL64(X)decimal128(38, X)

注1: PROTOCOL_ARROW 协议同时支持以上除了 DECIMAL32/DECIMAL64 外的 Array Vector 类型。

注2: 使用 PROTOCOL_ARROW 协议获取 pyarrow.Table 数据后,如果需要将数据转换为 pandas.DataFrame,由于 DolphinDB NANOTIME 数据类型对应 Arrow 的 time64(ns) 类型,因此要求进行转换的小数数值必须为 0.001 的倍数,否则会提示 Value xxxxxxx has non-zero nanoseconds

注3: Arrow 插件自 2.00.11 版本起,下载 UUID / INT128 后的字节顺序从反转修正为和上传时的顺序保持一致。

代码示例:

>>> s.run("table(1..3 as a)")
pyarrow.Table
a: int32
----
a: [[1,2,3]]