Arrow
物理布局、Array(数组)、Schema(模式)和 RecordBatch(记录批次)Physical Layout(物理布局):Physical Layout (或 DataTypeLayout) 定义了数据类型的内存布局,即如何在内存中表示和组织数据物理布局结构体DataTypeLayout的 C++ 实现被定义在cpp\src\arrow\type.h 头文件中,其中定义了 4 种 BufferSpec :FixedWidth(单值定长类型),VariableWidth(变长类型Bitmap(位图记录空值),AlwaysNull(始终为空)基于DataTypeLayout结构体中的 4 种 BufferSpec 进行组合使用,Apache Arrow 提供了多种物理布局类型DataType(数据类型基于物理布局 physical layout,Arrow 提供了一套对应的逻辑类型 logical type,即 DataType根据物理布局中的定长类型(Fixed-size)和变长类型(Variable-size)等类型划分,Arrow 提供了如下种类的数据类型:定长类型(FixedWidthType):Boolean, Int, Floating Point, Decimal, Date, Time, Timestamp, Interval, Duration 等嵌套类型(Nested Types):List, Struct, Map, Union 等Array(数组):Array(或 Vector) 是 Apache Arrow 中的数据容器Array 数据结构被定义为 ArrayDataFixed-size Primitive LayoutVariable-size Binary Layout 是用于存储可变大小二进制数据类型的布局方式RecordBatch 是 Apache Arrow 中一组具有相同结构的数组 Array 或分块数组 ChunkedArray 构成的集合RecordBatch 是序列化数据的基本单位,它由多个字段(Field)组成的有序集合构成,每个字段对应一个数组,而每个数组的长度彼此相同,但数据类型可能不同RecordBatch 的序列化形式包括 data header和body两个部分
Arrow
Arrow 的C Data Interface 定义了3个C结构体Arrow C data interfaceArrow libraries C 数据接口(C Data Interface)与 IPC 格式(Arrow IPC Format)是两种不同的数据交换机制C Data Interface数据库 / 引擎对外提供 Arrow 格式结果,不绑定 Arrow 库仅限同进程,跨进程用 Arrow IPCNo buffer reassembly (data is already exposed in logical Arrow format).struct ArrowSchema {struct ArrowArray {struct ArrowArrayStream { Arrow C stream interfaceIPC 格式(Arrow IPC Format) 对于进行间通信而言,消息在不同进程之间传递需要进行序列化和反序列化 serialization/deserializationApache Arrow IPC Format 采用了高性能序列化方式 FlatBuffers 来对元数据 metadata 进行序列化,对于消息体直接使用数据缓冲区 raw data buffers 传输数据而不需要进行序列化操作
Schema.fbs is the authoritative
Lance
lance namespace
Lance 表(又称 Lance 数据集)命名空间、目录、模式、数据库、元数据存储和元湖。其中,命名空间Apache Hive 使用 目录 → 数据库 → 表模型 Apache Iceberg 的 REST 目录则采用 目录 → 多级命名空间 → 表的层次结构Lance 命名空间是一个集中式存储库,用于发现、组织和管理 Lance 表
/path/to/dataset:├─ data/*.lance # 列式数据文件├─ _versions/*.manifest # 版本清单(每个版本一个)├─ _indices/{UUID}/index.idx # 二级索引(向量/标量)├─ _deletions/*.{arrow,bin} # 删除文件(行ID)└─ _transactions/*.txn # 事务文件(冲突检测)
lance 与Arrow
Duckdb与Arrow
使用nanoarrow 而未使用libarrow--只要数据交换协议src/include/duckdb/common/arrow/nanoarrow/nanoarrow.hsrc/include/duckdb/common/arrow/nanoarrow/nanoarrow.hppsrc/common/adbc/nanoarrow/schema.cpp duckdb/function/table/arrow/arrow_duck_schema.hpp
DuckDB集成Arrow列式存储格式,实现ADBC接口 src/include/duckdb/common/adbc/adbc.hpp Arrow ADBC(Apache Arrow Database Connectivity)是一个用于数据库访问的统一 API 标准类似于 ODBC/JDBC,但它是Arrow 原生
扩展src/include/duckdb/common/arrow/arrow_type_extension.hpp
###nanoarrow 的核心是一个小型的 C 库,编译后仅几百KB,同时提供了R和Python的绑定,安装大小约为1MB。它采用单文件头文件(nanoarrow.h)和源码文件(nanoarrow.c)
cyberRT
<1>同进程-跨进程--跨机器<2>chunk <3>message 定长类型和动长类型
参考
https://arrow.apache.org/docs/format/CDataInterface.htmlhttps://github.com/apache/arrow-nanoarrow/tree/main/src/nanoarrowhttps://mp.weixin.qq.com/s/uUvd1vLhEWcys8cuXkK9nQDuckDB:DuckDB 与 Arrow 生态的融合—— 为什么它是 Polars、Pandas 的理想后端