词汇表#
- array#
- vector#
具有已知长度、所有值类型相同的*连续*、*一维*值序列。数组包含零个或多个缓冲区(buffer)、一个非负长度和一个数据类型(data type)。根据列式格式的定义,数组的缓冲区按照数据类型进行布局。
数组之所以是连续的,是因为遍历数组中的值会遍历单个缓冲区集合,即使数组可能由多个不连续的缓冲区组成,或者由本身跨越多个子数组的子数组组成。
数组之所以是一维的,是因为它们是槽(slot)或单个值的序列,尽管对于某些数据类型(如结构体或联合体),一个槽可能代表多个值。
由Arrow 列式格式定义。
- buffer#
具有给定长度的*连续*内存区域。缓冲区用于存储数组的数据。
缓冲区可能位于 CPU 内存、文件内存映射区域、设备(如 GPU)内存等,尽管并非所有 Arrow 实现都支持所有这些可能性。
- canonical extension type#
经过 Arrow 社区标准化以提高不同实现之间互操作性的扩展类型(extension type)。
另请参阅
- child array#
- parent array#
在嵌套类型(nested type)的数组中,父数组对应于父类型(parent type),子数组对应于子类型(child type)。例如,
List[Int32]
类型的父数组有一个Int32
类型的子数组。- child type#
- parent type#
在嵌套类型(nested type)中,嵌套类型是父类型,子类型是其参数。例如,在
List[Int32]
中,List
是父类型,而Int32
是子类型。- chunked array#
具有已知长度、所有值类型相同的*不连续*、*一维*值序列。由零个或多个数组(array)(即“块”)组成。
分块数组之所以是不连续的,是因为遍历分块数组中的值可能需要为不同的索引遍历不同的缓冲区。
不属于列式格式的一部分;此术语特定于 Arrow 的某些语言实现(主要是 C++ 及其绑定)。
另请参阅
- complex type#
- nested type#
一种数据类型(data type),其结构依赖于一个或多个其他子数据类型(child data type)。例如,
List
是一种嵌套类型,它有一个子类型。当且仅当两个嵌套类型的子类型也相等时,这两个嵌套类型才相等。
- data type#
- type#
值可以采用的类型,例如
Int8
或List[Utf8]
。数组的类型根据Arrow 列式格式确定其值在内存中的布局方式。- dictionary#
伴随字典编码(dictionary-encoded)数组的值数组。
- dictionary-encoding#
一种数组,将其值存储为指向字典(dictionary)数组的索引,而不是直接存储值。
另请参阅
- extension type#
- storage type#
扩展类型是用户定义的数据类型(data type),它向现有数据类型添加额外的语义。这使得不支持特定扩展类型的实现仍然可以处理底层数据类型(即“存储类型”)。
例如,UUID 可以表示为 16 字节的定长二进制类型。
另请参阅
- field#
Schema中的一列。包含字段名称、数据类型(data type)、指示字段是否可空的标志,以及可选的键值元数据。
- IPC file format#
- file format#
- random-access format#
IPC 流式格式(IPC streaming format)的扩展,可用于将 Arrow 数据序列化到磁盘,然后通过随机访问单个记录批进行读取。
- IPC format#
关于如何序列化 Arrow 数据的规范,以便其可以在进程/机器之间传输或持久化到磁盘。
- IPC message#
- message#
特定内存结构(如记录批(record batch)或Schema)的 IPC 表示。它总是Flatbuffers 协议文件中
MessageHeader
的成员之一。- IPC streaming format#
- streaming format#
一种用于流式传输 Arrow 数据或将数据序列化到文件的协议,由IPC 消息(IPC message)流组成。
- physical layout#
关于如何在内存中排列值的规范。
另请参阅
- primitive type#
没有子类型的数据类型。
另请参阅
- record batch#
在 IPC 格式中:基本数据单元。记录批由对应于一个Schema的缓冲区(buffer)有序列表组成。
在某些实现中(主要是 C++ 及其绑定):*连续*的*二维*数据块。记录批由长度相同的数组(array)有序集合组成。
与数组类似,记录批之所以是连续的,是因为遍历记录批中的行会遍历单个缓冲区集合。
- schema#
字段集合,包含可选元数据,用于确定对象(如记录批(record batch)或表(table))的所有数据类型(data type)。
- slot#
数组中的单个逻辑值,即“行”。
- table#
由分块数组(chunked array)有序集合组成的*不连续*、*二维*数据块。所有分块数组长度相同,但类型可能不同。不同列的分块方式可能不同。
与分块数组类似,表之所以是不连续的,是因为遍历表中的行可能需要为不同的索引遍历不同的缓冲区。
不属于列式格式的一部分;此术语特定于 Arrow 的某些语言实现(例如 C++ 及其绑定,以及 Go)。