Arrow
Apache Arrow 是一种跨平台的内存数据格式,被设计为一种内存中的列式数据格式,可以高效地存储和传输大规模数据集,同时提供了高性能的数据操作功能。在引入 Arrow 插件之前,DolphinDB 与 API 进行数据交互时可以通过 PICKLE 或者 DDB 协议进行序列化。引入 Arrow 插件后,DolphinDB 数据,可以通过 ARROW 协议转换为 Arrow 格式进行传输,从而使得 DolphinDB 与 API 之间的数据传输更高效。
注意:
- 自 DolphinDB 2.00.11 版本起,formatArrow 插件更名为 Arrow。
- 自 2.00.12 版本起,Arrow 插件可从插件市场直接下载,允许执行
loadPlugin函数加载。2.00.11 及之前版本必须调用loadFormatPlugin函数才能正常加载。loadFormatPlugin函数使用方式同loadPlugin函数,但只能用来加载数据格式插件。
安装插件
版本要求
DolphinDB Server:2.00.12 及更高版本。支持 Linux x86-64, Linux ABI, Windows x86-64。
安装步骤
在 DolphinDB 客户端中使用
listRemotePlugins命令查看插件仓库中的插件信息。注意:仅展示当前操作系统和 server 版本支持的插件。若无预期插件,可自行编译(请自行选择对应分支下的插件)或在 DolphinDB 用户社区进行反馈。
login("admin", "123456") listRemotePlugins()使用
installPlugin命令完成插件安装。installPlugin("arrow")使用
loadPlugin命令加载插件。loadPlugin("arrow")
接口说明
Arrow 插件不提供用户可调用函数接口。
loadPlugin 函数返回的接口仅供 DolphinDB 内部调用,不支持用户通过脚本调用。
数据类型转换说明
目前仅 Python API 可以通过 PROTOCOL_ARROW 协议下载 Arrow 格式数据。
DolphinDB → Arrow
支持序列化传输 DolphinDB Table 为 Arrow Table。DolphinDB 与 Arrow 数据类型转换关系如下:
| 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 类型。
- 自 2.00.11 版本起,下载 UUID / INT128 后的字节顺序从反转修正为和上传时的顺序保持一致。
Arrow→ DolphinDB
支持反序列化传输 Arrow Table 为 DolphinDB Table。Arrow 与 DolphinDB 数据类型转换关系如下:
| Arrow 类型 | DolphinDB 类型 |
|---|---|
| boolean | BOOL |
| int8 | CHAR |
| int16 | SHORT |
| int32 | INT |
| int64 | LONG |
| float32 | FLOAT |
| float64 | DOUBLE |
| date32 | DATE |
| time32(s) | SECOND |
| time32(ms) | TIME |
| time64(ns) | NANOTIME |
| timestamp(s) | DATETIME |
| timestamp(ms) | TIMESTAMP |
| timestamp(ns) | NANOTIMESTAMP |
| utf8/large_utf8 | STRING |
| dictionary(int32, utf8/large_utf8) | SYMBOL |
| fixed_size_binary(16) | INT128 |
| large_binary | BLOB |
| decimal128 | DECIMAL128 |
| list<value_type> | 对应 Array Vector |
注意:
- list<value_type> 转换为 Array Vector 时,value_type 仅支持数值类型和时间类型。
使用示例
DolphinDB server
login("admin", "123456");
loadPlugin("arrow");Python API
使用 Python API 通过 PROTOCOL_ARROW 协议从 DolphinDB 下载 Arrow 格式数据。
import dolphindb as ddb
import dolphindb.settings as keys
s = ddb.session("127.0.0.1", 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]]使用 Python API 通过 PROTOCOL_ARROW 协议向 DolphinDB 上传 Arrow 格式数据。
import dolphindb as ddb
import dolphindb.settings as keys
import pyarrow as pa
conn = ddb.Session("127.0.0.1", 8848, "admin", "123456", protocol=keys.PROTOCOL_ARROW)
expected = pa.table({
'clarge_string': pa.array(['large_str1', 'large_str2', None], type=pa.large_string())
})
conn.upload({"test_tab": expected})注意:现版本中 DolphinDB 服务器不支持使用 Arrow 协议时开启压缩。
