Apache Avro - 内部表示



我正在学习Apache Avro,我想知道它在内部是如何表示的。如果我为同一个问题描述Apache Parquet,我可以说每个Parquet文件都由row_groups组成,每个row_groups都包含列块,而列块有多个具有不同编码的页面。最后,有关所有这些的元数据存储在文件页脚上。这个文件表示清楚地记录在Github页面以及它的官方Apache页面中。

为了找到Apache Avro的相同内部表示,我查看了多个页面,如Github页面,Apache Avro的家和Hadoop权威指南以及更多在线教程,但我无法找到我正在寻找的内容。我知道Apache Avro是面向行的文件格式,每个文件都有架构以及文件中的数据。所有这些都很好,但我想知道数据如何进一步细分以进行内部组织,例如RDBMS表的页面。

任何与此相关的指示将不胜感激。

Avro 容器文件格式在此处的文档中指定。如果你喜欢整个简洁的事情,那么维基百科有一个更简洁的描述:

Avro 对象容器文件包括:

  • 文件头,后跟
  • 一个或多个文件数据块。

文件头包括:

  • 四个字节,ASCII 'O'、'b'、'j',后跟 Avro 版本号,即 1 (0x01((二进制值 0x4F 0x62 0x6A 0x01(。
  • 文件元数据,包括架构定义。
  • 此文件的 16 字节随机生成的同步标记。

对于数据块,Avro 指定了两种序列化编码,二进制和 JSON。大多数应用程序将使用二进制编码,因为它更小、更快。对于调试和基于 Web 的应用程序,JSON 编码有时可能适用。

您可以根据他们的参考实现来验证这一点,例如在 DataFileWriter 中.java - 从主create方法开始,然后查看append(D datum)方法。

二进制对象编码在其文档中进行了描述 此处.编码数据只是对编码对象(或多个对象(的遍历,每个对象和字段的编码如文档中所述。

最新更新