Avro Schema Evolution (avro schema演化,avro schema兼容性) 介紹


Avro Schema Evolution

schema evolution不知道中文官方翻譯是什么,schema演化?進化?不管了,懂意思就好。本篇文章主要介紹一下Avro Schema進化后的一些兼容性問題。

 

Schema Evolution有4種:

Backward: 向后兼容,用新schema可以讀取舊數據,有些字段沒有數據,就用default值

Forward: 向前兼容,用舊schema可以讀取新數據,avro將忽略新加的字段

Full: 全兼容,支持向前兼容,向后兼容

Breaking: 不兼容

 

1. Backward Compatible change

Backward: 向后兼容,用新schema可以讀取舊數據,有些字段沒有數據,就用default

  • 由於有了默認值,我們可以使用新schema讀取舊數據。如果字段不存在,Avro將使用默認值
  • 如果要向后兼容,新schema的新增欄位必須要有默認值

2. Forward Compatible change

  • Forward: 向前兼容,用舊schema可以讀取新數據,avro將忽略新加的字段
  • 如果要向前兼容,刪掉的欄位必須要有默認值

 

 

3. Fully Compatible change

Full: 全兼容,支持向前兼容,向后兼容

想要全兼容要做到以下兩點:

  • 只添加有默認值的字段
  • 只移除有默認值的字段

4. Not Compatible change

下面的一些改變會導致不兼容:

  • 從枚舉中添加/刪除元素
  • 更改字段數據類型(例如:string à int)
  • 重命名必需的字段(字段沒有默認值)

 

編寫Avro schema時的一些建議:

1.Make your primary key required

2.Give default values to all the fields that could be removed in the future

3.Be very careful when using Enums as they can’t evolve over time

4.Don’t rename fields. You can add aliases instead (other names)

5.When evolving a schema, ALWAYS give default values

6.When evolving a schema, NEVER delete a required field

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM