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 编译
初始化环境配置
编译 Arrow 开发包:
git clone https://github.com/apache/arrow.git cd arrow/cpp mkdir build cd build cmake .. make -j编译完成后,拷贝以下文件到插件文件夹中的相应目录:
文件 目标目录 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 数据类型转换关系如下:
| DolphinDB | Arrow |
|---|---|
| BOOL | boolean |
| CHAR | int8 |
| SHORT | int16 |
| INT | int32 |
| LONG | int64 |
| DATE | date32 |
| MONTH | date32 |
| TIME | time32(ms) |
| MINUTE | time32(s) |
| SECOND | time32(s) |
| DATETIME | timestamp(s) |
| TIMESTAMP | timestamp(ms) |
| NANOTIME | time64(ns) |
| NANOTIMESTAMP | timestamp(ns) |
| DATEHOUR | timestamp(s) |
| FLOAT | float32 |
| DOUBLE | float64 |
| SYMBOL | dictionary(int32, utf8) |
| STRING | utf8 |
| IPADDR | utf8 |
| UUID | fixed_size_binary(16) |
| INT128 | fixed_size_binary(16) |
| BLOB | large_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 后的字节顺序从反转修正为和上传时的顺序保持一致。
