这是一个数据序列化系统。
基本概念
其元数据 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 则是数据写入时的编码。