Evolution du schéma Avro

J'ai deux questions:

  1. Est-il possible d'utiliser le même lecteur et analyser les dossiers qui ont été écrits avec deux schémas qui sont compatibles, par exemple Schema V2 seulement un champ facultatif par rapport à Schema V1 et je veux que le lecteur de comprendre à la fois? Je pense que la réponse est non, mais si oui, comment dois-je faire?
  2. J'ai essayé d'écrire un enregistrement avec Schema V1 et de la lecture avec Schema V2mais j'obtiens l'erreur suivante:

    org.apache.avro.AvroTypeException: Trouvé foo, attend foo

J'ai utilisé avro-1.7.3 et:

   writer = new GenericDatumWriter<GenericData.Record>(SchemaV1);
   reader = new GenericDatumReader<GenericData.Record>(SchemaV2, SchemaV1);

Ici sont des exemples des deux schémas (j'ai essayé d'ajouter un espace de noms, mais pas de chance).

Schéma V1:

{
"name": "foo",
"type": "record",
"fields": [{
    "name": "products",
    "type": {
        "type": "array",
        "items": {
            "name": "product",
            "type": "record",
            "fields": [{
                "name": "a1",
                "type": "string"
            }, {
                "name": "a2",
                "type": {"type": "fixed", "name": "a3", "size": 1}
            }, {
                "name": "a4",
                "type": "int"
            }, {
                "name": "a5",
                "type": "int"
            }]
        }
    }
}]
}

Schéma V2:

{
"name": "foo",
"type": "record",
"fields": [{
    "name": "products",
    "type": {
        "type": "array",
        "items": {
            "name": "product",
            "type": "record",
            "fields": [{
                "name": "a1",
                "type": "string"
            }, {
                "name": "a2",
                "type": {"type": "fixed", "name": "a3", "size": 1}
            }, {
                "name": "a4",
                "type": "int"
            }, {
                "name": "a5",
                "type": "int"
            }]
        }
    }
},
{
            "name": "purchases",
            "type": ["null",{
                    "type": "array",
                    "items": {
                            "name": "purchase",
                            "type": "record",
                            "fields": [{
                                    "name": "a1",
                                    "type": "int"
                            }, {
                                    "name": "a2",
                                    "type": "int"
                            }]
                    }
            }]
}]
} 

Merci d'avance.

source d'informationauteur magicalo