AVRO 元数据格式

2022-11-09 warehouse

这是一个数据序列化系统。

基本概念

其元数据 Schema 通过 JSON 保存,包括了基本数据类型 null boolean int long float double bytes string 几种基础类型,其中 bytes 表示字节流,而 string 表示 unicode 字符集。

另外,还支持复杂数据类型:Record Enum Array Map Union Fixed

复杂类型

如下介绍相关的复杂类型。

Record

在 Hudi 中,通常是作为最上层的定义,也就是定义整个的表结构。

Union

组合类型,支持多种类型的组合,例如在 fields 中,对应如下内容,表示类型可以是 null 以及 string

{"name": "notes", "type":["null", "string"], "default": null}

不允许出现多个相同类型,第一个值会作为默认值,如上,默认是 null 类型。

Rust

可以通过 cargo add apache_avro 引入。

常见问题

Reader/Writer Schema

至少需要存在一个 Writer Schema 对数据进行编码,通常会将 Schema 和数据同时编码到文件中。读取数据的时候同样需要一个 Schema 对编码的数据进行解析,大部分场景两者是相同的。

不过 AVRO 也允许中间有 Schema 的变更,但是需要保证兼容性,例如可以调整列的顺序、从 int 调整为 long、删除某个列、新增列 (需要有默认值) 等操作。

也因此就存在了 Reader Schema 用于读取,而 Writer Schema 则是数据写入时的编码。