【问题标题】:Is there a way to support schema evolution in avro4s有没有办法支持 avro4s 中的模式演变
【发布时间】:2017-08-15 18:18:33
【问题描述】:

有没有办法通过AvroInputStream.binary api 读取 bytesArray 并以某种方式指定作者版本?

val in = new ByteArrayInputStream(bytesFromFile)
val input = AvroInputStream.binary[newClass](in)// old ?
val result = input.iterator.toSeq

换句话说,avro4s 是否支持二进制记录的模式演化?

【问题讨论】:

    标签: scala schema avro avro4s


    【解决方案1】:

    avro4s 是否支持二进制记录的模式演化?

    没有。当您向 Avro 提供模式时,Avro 通常支持 Schema Evolution,它可以匹配属性名称及其类型。当没有模式时,它会根据序列化和反序列化方面的声明顺序进行中继。如果你修改你的类,就会破坏兼容性。

    【讨论】:

    • Avro DatumReader 也有一个 api 可以获取写入器模式 GenericData.createDatumReader(Schema writer, Schema reader) 所以理论上你总是可以提供一个模式.. 我正在寻找 avro4s 中的类似功能.. 一种提供 inputStream 的方法(datumReader) 作家模式
    • @NetanelRabinowitz 你说得对,DatumReader 确实有那个 API,但是 avro4s 抽象了它,因为它通过编译时宏提供了 Schema。不幸的是,没有提供“较低级别”的 API。此外,如果您的 avro blob 没有 Schema,那么您是否向 DatumReader 提供一个也没关系,它没有可匹配的对象。
    • 我想我应该打开一个功能请求而不是...... :) 谢谢!
    • @NetanelRabinowitz 或者更好的是,一个拉取请求:)。欢迎您。
    • @NetanelRabinowitz 我正在打电话,明天再看看。
    猜你喜欢
    • 2015-01-15
    • 2019-09-21
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多