推文
@BaiBtw · 2026-10-17 02:20
Avro 对象容器文件会把写入时的字段定义和数据一起保存。接收方拿到的既有数据,也有解释这些数据的 schema。 比如商品表原来只有商品 ID、名称、价格,后来增加了颜色。两批数据分别导出成 Avro 对象容器文件,各自的文件头保存对应的 JSON schema,后面是按该 schema 编码的数据块。读取旧文件时,仍能知道当时有哪些字段,不必拿新表结构去猜旧数据。 写入和读取使用的 schema 可以不同,但仍需满足类型兼容等规则。记录里的字段按名字匹配;写入端多出的字段,读取端可以忽略;读取端需要、旧数据里却没有的字段,要用读取端 schema 中的默认值补齐,没有默认值就会报错。 所以,新 schema 增加 color 字段,并不意味着旧文件会自动多出颜色。新程序读旧数据能否成功,要看新 schema 有没有为这个字段定义合适的默认值。 Avro 用于数据序列化,也支持 RPC。它不要求先生成代码才能读写数据文件,代码生成是可选项;这和“字段怎么改都能自动兼容”是两回事。
曝光 22 · 评论 0 · 点赞 1 · 书签 0