hudi cow
新增字段
- 同步merge成parquet
- scheme变更,可读,缺失数据为null
减少字段
- 写入失败:Parquet/Avro schema mismatch: Avro field ‘name’ not found
结论:新增字段可写可读,但新增后字段不能再减少
hudi mor
新增字段(会出现读取失败)
- 异步merge成parquet(有变更),写入.avro文件(无变更)
- scheme变更,读取失败:Found hoodie.hudi_mor.hudi_mor_record, expecting hoodie.hudi_mor.hudi_mor_record, missing required field name2
减少字段
- 写入失败:Parquet/Avro schema mismatch: Avro field ‘title’ not found
结论:新增一个字段后,字段不能减少写入,数据也读不出来,只能不停按照新字段写入
parquet file
新增字段,减少字段都可写入:df.save
hive,spark读取字段顺序没问题,presto顺序异常
备注:
Hudi基于Avro格式表示Schema,因此对Schema的Evolution能力完全等同于Avro Schema的Evolution能力,即可以增加字段以及向上兼容的变更,如int变成long是兼容的,但long变成int是不兼容的。
当前现在社区已经有方案支持Full Schema Evolution,即可以增加一个字段,删去一个字段,重命名,也就是变更一个字段。