Arrow

Apache Arrow 将列式数据结构的优势与内存计算相结合。DolphinDB 提供的 Arrow 支持 API 与 DolphinDB 进行数据传输时使用 Arrow 数据格式,并自动进行数据类型转换。

注意:自 2.00.11 版本起,formatArrow 插件更名为 Arrow。

请使用 DolphinDB 2.00.X 系列、2.00.11 及以上版本的 server。

默认使用 Arrow 版本为 9.0.0。

安装插件

Linux 编译

初始化环境配置

  1. 编译 Arrow 开发包:

    git clone https://github.com/apache/arrow.git
    cd arrow/cpp
    mkdir build
    cd build
    cmake .. 
    make -j
  2. 编译完成后,拷贝以下文件到插件文件夹中的相应目录:

    文件目标目录
    arrow/cpp/src/arrow./include
    arrow/cpp/build/release/libarrow.so.900./build

    或者直接使用 lib 目录下提供的预编译好的 libarrow.so.900

编译插件

cd /path/to/plugins/Arrow
mkdir build
cd build
cmake ..
make

注意:编译之前请确保 libDolphinDB.so 和 libarrow.so.900 在 gcc 可搜索的路径中。可使用 LD_LIBRARY_PATH 指定其路径,或者直接将其拷贝到 build 目录下。

加载插件

通过以下命令加载 Arrow 插件:

loadFormatPlugin("/path/to/plugin/PluginArrow.txt")

使用示例

DolphinDB server

loadFormatPlugin("path/to/Arrow/PluginArrow.txt")

Python API

import dolphindb as ddb
import dolphindb.settings as keys
s = ddb.session("192.168.1.113", 8848, "admin", "123456", protocol=keys.PROTOCOL_ARROW)
pat = s.run("table(1..10 as a)")

print(pat)
-------------------------------------------
pyarrow.Table
a: int32
----
a: [[1,2,3,4,5,6,7,8,9,10]]

注意:现版本中 DolphinDB 服务器不支持使用 Arrow 协议时开启压缩。

支持的数据类型

DolphinDB -> Arrow

DolphinDB 向 API 传输数据时,Arrow 与 DolphinDB 数据类型转换关系如下:

DolphinDBArrow
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)

注意

  • 同时支持以上除了 DECIMAL 外的 ArrayVector 类型。
  • 使用 Arrow 数据格式从 DolphinDB Server 获取数据后转换为 pandas.DataFrame 时,DolphinDB 的 NANOTIME 数据类型对应 Arrow 的 time64 数据类型,因此要求进行转换的数值必须为1000的倍数,否则会提示Value xxxxxxx has non-zero nanoseconds
  • 自 2.00.11 版本起,下载 UUID / INT128 后的字节顺序从反转修正为和上传时的顺序保持一致。