数据工程数据分析大数据【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow12/arrow点击查看免费下载本指南基于 Apache Arrow 仓库中 docs/source/format/Glossary.rst 官方术语表系统梳理 Arrow 列式格式Columnar Format的核心术语体系涵盖数组与缓冲区、类型系统、字典编码、扩展类型、IPC 序列化等关键概念并结合仓库内 FlatBuffers 协议文件与 C 源码实现进行印证。读完本文你将掌握 Arrow 生态中最常出现的专业词汇的确切含义与相互关系能准确阅读 Arrow Columnar Format 规范 及其他格式文档。图Table由 Chunked Array 组成各列可独立分块与 Record Batch由等长 Array 组成被所有实现识别的结构对比出自 tables-versus-record-batches.svg。Apache Arrow 定义了一套跨语言共享的内存数据格式而沟通这套格式的语言就是官方维护的 Glossary 术语表。它被收录在 格式规范索引 中同时也在开发者入门指南里被推荐给新手——因为无论你是要读规范、写实现还是调 API都绕不开这些词汇。本文按逻辑分组逐一解读全部术语并给出仓库内的源码证据。一、数据的基本单元Array、Slot 与 Bufferarray数组/ vector向量一个连续、一维的值序列长度已知且所有值具有相同类型。一个数组由零个或多个 :term:buffers buffer、一个非负的长度和一个 :term:data type组成。数组的缓冲区按照列式格式定义的数据类型进行布局。这里连续contiguous有两层含义从内存角度看遍历一个数组的值就是在遍历同一组缓冲区buffers尽管数组可能由多个不连续的缓冲区拼接而成也可能包含跨多个缓冲区的子数组child arrays从维度角度看数组是一维的——它是槽位slot或单值的序列即使某些数据类型如 struct 或 union的一个槽位在逻辑上代表多个值。数组的规范定义见 Columnar.rst即术语表中指向的./Columnar。在 C 实现中数组的基类是 cpp/src/arrow/array/array_base.h 中的class ARROW_EXPORT Array第 53 行所有具体数组类型如 Int32Array、StringArray均派生自它。slot槽位数组中的单个逻辑值即一行。slot 是数组的一维性在语义上的体现length为 5 的数组就有 5 个槽位。在 IPC 的 FlatBuffers 定义中每个嵌套层级节点的FieldNode都记录了该层级的length值槽位数与null_count空值数见 format/Message.fbs 第 34-43 行。buffer缓冲区一块具有给定长度的连续内存区域。缓冲区用于存储数组的数据。缓冲区的物理位置非常灵活可以位于 CPU 内存可以通过mmap从文件映射而来也可以位于设备如 GPU内存——虽然并非所有 Arrow 实现都支持所有这些可能性。缓冲区的对齐与填充要求推荐 64 字节对齐缓冲区间填充 8 字节倍数详见 Columnar.rst 的 Buffer Alignment and Padding 小节。正是数组由一组缓冲区按类型规则排列而成这一事实构成了整个列式格式高效性的根基。child array子数组/ parent array父数组在嵌套类型nested type的数组中父数组对应于父类型parent type子数组对应于子类型child type。例如List[Int32]类型的父数组拥有一个Int32类型的子数组。List[Int32]的父数组负责存储偏移量子数组存储实际的值序列二者协同完成嵌套数据的表达。这一术语与下一节的 child type / parent type 严格对应。二、类型系统从 primitive 到 nesteddata type数据类型/ type类型一个值可以具有的类型例如Int8或List[Utf8]。数组的类型决定其值如何按照 Columnar 规范 在内存中布局。数据类型是理解整个格式的枢纽它既决定了物理布局physical layout也决定了逻辑语义。术语表提示它与 nested type、primitive type 相关联。primitive type原始类型没有任何子类型child types的数据类型。如Int8、Double、Boolean都是原始类型。与之相对的是 nested type。complex type复合类型/ nested type嵌套类型结构依赖于一个或多个子数据类型的数据类型。例如List就是一个带有一个子类型的嵌套类型。两个嵌套类型相等当且仅当它们的子类型也相等。嵌套类型的相等性判定规则递归比较子类型直接决定了 schema 比较的语义。在 Arrow 中常见的嵌套类型包括List、Struct、Union、Map、FixedSizeList等它们在 Columnar.rst 中都有专门的物理布局章节。child type子类型/ parent type父类型在嵌套类型中嵌套类型是父类型子类型是它的参数。例如List[Int32]中List是父类型Int32是子类型。注意与 child array / parent array 的对应类型层面叫 parent type / child type实例数据层面叫 parent array / child array。field字段schema 中的一列。由一个字段名、一个数据类型、一个表示该字段是否可空的标志以及可选的键值元数据组成。field 是 schema 的组成单元。在 C 实现中对应cpp/src/arrow/field.h中的 Field 类在 format/Schema.fbs 中Field表也包含了name、nullable、typeType union以及custom_metadataKeyValue 数组等字段。schema模式一组字段fields的集合带有可选元数据用于确定对象如 record batch 或 table的所有数据类型。schema 相当于关系数据库中的表头/目录catalog它描述了数据的逻辑结构。schema 本身也是 IPC 中可以序列化的消息类型之一见下文 MessageHeader。三、跨实现的高层容器Chunked Array、Record Batch 与 Tablerecord batch记录批量术语表中给出了两个层面的定义在 IPC 格式中数据的基本单元。一个 record batch 由与某个 schema 相对应的一组有序缓冲区buffers组成在部分实现中主要是 C 及其绑定一块连续、二维的数据块由一组等长的数组arrays组成。与数组类似record batch 的连续体现在遍历 record batch 的行就是在遍历同一组缓冲区。在 format/Message.fbs 中RecordBatch表第 84-118 行记录length行数、nodesFieldNode 列表、buffersBuffer 列表以及可选的compressionBodyCompression与variadicBufferCounts。C 实现见 cpp/src/arrow/record_batch.h 中的class ARROW_EXPORT RecordBatch。chunked array分块数组一个不连续、一维、长度已知且所有值类型相同的值序列由零个或多个数组即块chunks组成。分块数组的不连续性体现在遍历不同索引的值可能遍历不同的缓冲区。关键提示分块数组不属于列式格式本身它是某些语言实现主要是 C 及其绑定特有的数据结构。C 实现见 cpp/src/arrow/chunked_array.h 的class ARROW_EXPORT ChunkedArray。它允许把多个长度不等的数组逻辑上拼成一个大数组便于增量追加数据。table表一个不连续、二维的数据块由一组有序的分块数组组成。所有分块数组长度相同但类型可以不同不同列的分块方式可以不同。与 chunked array 一样table 也不属于列式格式是特定实现如 C 及其绑定、Go提供的概念。C 实现见 cpp/src/arrow/table.h 的class ARROW_EXPORT Table。Table 与 Record Batch 的区别正是图 1 展示的内容Record Batch 的所有列都是等长的单个数组而 Table 的每一列可以是独立分块的 chunked array。dictionary字典伴随字典编码数组dictionary-encoded array的一组值数组。在 Arrow 中字典指被编码数组引用的那组去重后的值本身dictionary array / values而不是指字典类型。dictionary-encoding字典编码一种数组表示方式数组存储的是指向字典数组的索引而不是直接存储值本身。字典编码能显著压缩基数低repeated values 多的列。在 Columnar.rst 的 Dictionary-encoded Layout 小节中有详细的内存布局规范。序列化层面format/Message.fbs 中的DictionaryBatch表第 127-135 行定义了字典如何随 IPC 消息传递每个字典批次包含id、作为普通 RecordBatch 存储的data以及isDelta标志——若isDelta为 true则本批值追加到已有字典为 false 则替换整个字典。这正对应 format/Schema.fbs 中Feature枚举的DICTIONARY_REPLACEMENT值为 1用于声明流使用了同 ID 多完整字典替换机制。四、扩展类型体系storage type 与 canonical extension typeextension type扩展类型/ storage type存储类型扩展类型是用户自定义的数据类型它在现有数据类型之上附加额外的语义。这使得不支持特定扩展类型的实现仍然可以处理底层数据类型即存储类型。例如UUID 可以用 16 字节的定长二进制类型来表示。这是 Arrow 保证互操作性的关键设计遇到未知扩展类型时任何实现都可以退回到 storage type 处理数据只是丢失附加语义。扩展类型在序列化时通过 schema/field 的元数据ARROW:extension:name与ARROW:extension:metadata键值对传递详见 Metadata.rst 的扩展类型小节。C 实现见 cpp/src/arrow/extension_type.h 的class ARROW_EXPORT ExtensionType : public DataType。canonical extension type规范化扩展类型由 Arrow 社区标准化、旨在提升不同实现间互操作性的扩展类型。与用户自定义扩展类型不同canonical extension type 有官方定义所有实现应一致处理。官方列表与定义见 CanonicalExtensions.rst术语表中以:ref:format_canonical_extensions 引用例如 UUID 类型就属于规范化扩展类型之一。五、序列化与传输IPC 家族physical layout物理布局关于如何在内存中排列值的规范。物理布局是列式格式的内存蓝图对应 Columnar.rst 的 Physical Memory Layout 章节术语表中以:ref:format_layout 引用。它规定了每种类型的缓冲区结构例如原始定长类型Fixed-size Primitive Layout一个 validity bitmap 缓冲区 一个值缓冲区变长二进制Variable-size Binary Layoutvalidity bitmap offsets data 三组缓冲区字典编码Dictionary-encoded Layout、Run-End Encoded Layout、Union、Struct等也各有专门布局。IPC formatIPC 格式一种将 Arrow 数据序列化的规范使数据可以在进程/机器间传输或持久化到磁盘。IPC 是序列化层面的总称下分流式与文件式两种具体形式。完整协议定义位于 Columnar.rst 的 Serialization and Interprocess Communication (IPC) 章节规范中format-ipc锚点。IPC streaming formatIPC 流式格式/ streaming format流式格式一种用于流式传输 Arrow 数据或序列化数据到文件的协议由一串 IPC 消息组成。流式格式适合持续追加的数据管道如 Flight 传输、实时计算每条消息自带长度前缀可边写边读。IPC file formatIPC 文件格式/ file format / random-access format随机访问格式流式格式的扩展可将 Arrow 数据序列化到磁盘然后支持对单个 record batch 的随机访问读取。文件格式在流式格式基础上增加了文件头magic 标识、schema、字典批次与文件尾可选的元数据区与 magic 标识因此可以定位到任意 record batch 的偏移量直接读取。IPC messageIPC 消息/ message消息某种特定内存结构如 record batch 或 schema的 IPC 表示。它始终是 Message.fbs FlatBuffers 协议文件 中MessageHeader联合体的成员之一。在 format/Message.fbs 中union MessageHeader第 146-148 行包含Schema、DictionaryBatch、RecordBatch、Tensor、SparseTensor五类成员且规范建议为最大兼容性优先使用RecordBatch发送数据table Message第 150-155 行由versionMetadataVersion、header、bodyLength与custom_metadata组成消息体可选压缩BodyCompression表第 72-79 行支持LZ4_FRAME与ZSTD两种 codec压缩方法目前为BUFFER逐缓冲区压缩对应 format/Schema.fbs 中Feature枚举的COMPRESSED_BODY值为 2。元数据版本MetadataVersion见 format/Schema.fbs 第 30-51 行从 V1 演进到 V5V4 起 0.8.0非向后兼容V5 1.0.0与 V4 向后兼容V5 读取器可读 V4 元数据并建议实现提供 V4 兼容模式。六、术语速查表术语一句话定义关键点array / vector同类型值的连续一维序列由 buffers length data type 组成buffer给定长度的连续内存区域可位于 CPU、mmap、GPU 等slot数组中的单个逻辑值即一行child / parent array嵌套类型数组中父子层级的数组实例如List[Int32]的值数组与偏移数组data type值的类型如Int8、List[Utf8]决定内存布局primitive type无子类型的类型如Int8、Doublenested / complex type依赖一个或多个子类型的类型相等性递归比较子类型child / parent type嵌套类型中的类型参数关系List是父、Int32是子fieldschema 中的一列名称 类型 可空标志 元数据schema字段集合 可选元数据决定对象的所有数据类型record batchIPC 的基本数据单元 / 等长数组的二维块所有列等长chunked array多个数组拼接的一维序列不属于列式格式C 特有table一组 chunked array 的二维集合不属于列式格式C/Go 特有dictionary字典编码数组引用的值数组随 DictionaryBatch 传输dictionary-encoding存索引而非直接存值的编码支持 isDelta 增量字典extension type用户自定义的附加语义类型可回退到 storage typecanonical extension type社区标准化的扩展类型见 CanonicalExtensions 规范storage type扩展类型的底层数据表示如 UUID → FixedSizeBinary(16)physical layout值在内存中的排列规范每种类型有专门布局IPC formatArrow 数据序列化总规范含流式与文件两种形式IPC streaming format由一串 IPC 消息组成的流协议边写边读IPC file format支持随机访问的文件序列化格式可定位任意 record batchIPC message内存结构的 IPC 表示MessageHeader 联合体成员七、如何继续深入阅读完整的列式格式规范docs/source/format/Columnar.rst其中包含上述所有物理布局与 IPC 序列化的权威细节术语表中的physical layout、IPC format、record batch均指向它查看官方扩展类型清单docs/source/format/CanonicalExtensions.rst查看扩展类型与 schema 元数据规范docs/source/format/Metadata.rst阅读 IPC 消息的 FlatBuffers 定义format/Message.fbs 与 format/Schema.fbs查看术语表中关键概念的 C 实现Array、ChunkedArray、RecordBatch、Table、ExtensionType若你是新手可先阅读开发者指南中的资源推荐其中明确建议先熟悉本术语表再进入其他文档。掌握这套术语是读懂 Arrow 全部格式规范与跨语言代码库的起点——它们既是规范文件之间相互引用的锚点通过:term:与:ref:交叉链接也是各语言实现中类与 API 命名的依据。赞分享数据工程数据分析大数据【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow12/arrow点击查看免费下载相关推荐Apache Arrow 官方术语表精解从 Array 到 Table 的列式格式核心概念全梳理Apache Arrow 官方术语表精解从 Array 到 Table 的列式格式核心概念全梳理 Apache Arrow 的列式格式规范Columnar大数据数据分析数据工程序列化Apache Arrow 术语表全解Columnar Format 核心概念与源码级剖析Apache Arrow 术语表全解Columnar Format 核心概念与源码级剖析 本指南以 Apache Arrow 官方格式规范中的 Glossar数据工程大数据序列化数据分析OpenNHP 术语表Glossary协议角色、密码学与核心概念权威解析OpenNHP 术语表Glossary协议角色、密码学与核心概念权威解析 导读 本文档是 OpenNHP 项目与 CSA NHP 规范NHP 全称 Ne网络安全零信任密码学身份认证网络创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
