首页/数据/数据工程与 ETL 速查/Schema 演进与兼容性
管道基础52 条

Schema 演进与兼容性

上游加字段、改类型在数据链路里不可避免。基本原则:加带默认值的字段通常向后兼容,删字段要带默认值保证旧读兼容,改类型(除数值提升)通常不兼容。

向后兼容新 schema 能读旧数据(新增字段取默认值)
向前兼容旧 schema 能读新数据(删除字段需旧默认值)
不兼容类型变更、字段重命名(除非开启映射)

Hive 加列(CASCADE 同步到分区)

Hive 加列(CASCADE 同步到分区)
ALTER TABLE dwd_order ADD COLUMNS (channel STRING COMMENT '下单渠道') CASCADE;

Avro 兼容变更示意

Avro 兼容变更示意
{"name": "channel", "type": ["null", "string"], "default": null}
列式文件按名字定位字段,但 CSV/位置绑定格式按顺序读;链路里要明确字段顺序约定。

易错点

  • Hive 加列不加 CASCADE 时,旧分区读不到新列(表现为 null)
  • 改字段类型前先评估下游:多数引擎不会自动回退转换,会直接读失败

数据来源与参考

  • Apache Avro 官方文档:Schema Resolution
  • Apache Hive LanguageManual DDL:ALTER TABLE ADD COLUMNS
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌