12
votes

Évolution de schéma d'avrème

J'ai deux questions:

  1. est-il possible d'utiliser les mêmes enregistrements de lecteur et d'analyses qui ont été écrits avec deux schémas compatibles, par ex. Schema V2 Code> n'a qu'un champ facultatif supplémentaire par rapport à schema v1 code> et je veux que le lecteur comprenne les deux? Je pense que la réponse ici est non, mais si oui, comment puis-je faire ça? P> li>

  2. J'ai essayé d'écrire un enregistrement avec schema v1 code> et de le lire avec schema v2 code>, mais je reçois l'erreur suivante: p>

    org.apache.avro.avrotypeException: Trouvé FOO, attendant FOO P> LI> ol>

    J'ai utilisé Avro-1.7.3 et: P>

    {
    "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"
                                }]
                        }
                }]
    }]
    } 
    


0 commentaires

3 Réponses :


12
votes

J'ai rencontré le même problème. Cela pourrait être un bug d'avroi, mais vous pouvez probablement travailler en ajoutant "Par défaut": NULL dans le champ "Achat".

Vérifiez mon blog pour plus de détails: http: // ben- tech.blogspot.com/2013/05/avro-schema-evolution.html


1 commentaires

Les valeurs par défaut sont un must lors de l'utilisation de Schema Evolution. Si vous ne fournissez pas de valeur par défaut pour un champ présent dans le schéma du lecteur, mais pas dans le schéma de l'écrivain, Avro ne peut pas comprendre comment créer ce nouveau champ dans la structure analysée.



0
votes

Vous pouvez faire en face. Signifie que vous pouvez analyser les données SCHEM 1 et écrire des données de SCHEMA 2. Bécause à l'écriture de l'écriture Ilront écrire des données dans le fichier et si nous ne fournissons aucun champ à la lecture de temps qu'il ira bien. Mais si nous écrivons moins de champ que de lire, il ne reconnaîtra pas de champ supplémentaire au moment de la lecture, cela donnera une erreur.


0 commentaires

-1
votes

Le meilleur moyen est d'avoir un mappage de schéma pour maintenir le schéma comme le registre de schéma de l'avreur confluent.

TOUCHE TOPS: xxx

http://bytepadding.com/big-data/spark/avro/avro-serialization-de-Serialization-utilisation- Confluent-Schema-Registry /


0 commentaires