web-dev-qa-db-fra.com

Pourquoi nous avons besoin de l'évolution du schéma Avro

Je suis nouveau sur Hadoop et la programmation, et je suis un peu confus quant à l'évolution du schéma Avro. Je vais expliquer ce que je comprends d'Avro jusqu'à présent.

Avro est un outil de sérialisation qui stocke des données binaires avec son schéma json en haut. Le schéma ressemble à ceci.

{
    "namespace":"com.trese.db.model",
    "type":"record",
    "doc":"This Schema describes about Product",
    "name":"Product",
    "fields":[
        {"name":"product_id","type": "long"},
        {"name":"product_name","type": "string","doc":"This is the name of the product"},
        {"name":"cost","type": "float", "aliases":["price"]},
        {"name":"discount","type": "float", "default":5}
    ]
}

Maintenant, ma question est pourquoi nous avons besoin de évolution? J'ai lu que nous pouvons utiliser default dans le schéma pour de nouveaux champs; mais si nous ajoutons un nouveau schéma dans le fichier, ce schéma précédent sera écrasé. Nous ne pouvons pas avoir deux schémas pour un seul fichier.

Une autre question est, quels sont les schémas de lecture et d'écriture et comment aident-ils?

15
Anaadih.pradeep

Si vous avez un fichier avro et que vous souhaitez modifier son schéma, vous pouvez réécrire ce fichier avec un nouveau schéma à l'intérieur. Mais que faire si vous avez des téraoctets de fichiers avro et que vous souhaitez modifier leur schéma? Voulez-vous réécrire toutes les données, chaque fois que le schéma change?

L'évolution du schéma vous permet de mettre à jour le schéma utilisé pour écrire de nouvelles données, tout en conservant une compatibilité descendante avec le ou les schémas de vos anciennes données. Ensuite, vous pouvez tout lire ensemble, comme si toutes les données avaient un schéma. Bien sûr, il existe des règles précises régissant les modifications autorisées, afin de maintenir la compatibilité. Ces règles sont répertoriées sous Schema Resolution .

Il existe d'autres cas d'utilisation pour les schémas de lecture et d'écriture, au-delà de l'évolution. Vous pouvez utiliser un lecteur comme filtre. Imaginez des données avec des centaines de champs, dont vous n'êtes intéressé que par une poignée. Vous pouvez créer un schéma pour cette poignée de champs, pour lire uniquement les données dont vous avez besoin. Vous pouvez aller dans l'autre sens et créer un schéma de lecteur qui ajoute des données par défaut, ou utiliser un schéma pour joindre les schémas de deux jeux de données différents.

Ou vous pouvez simplement utiliser un schéma, qui ne change jamais, pour la lecture et l'écriture. C'est le cas le plus simple.

33
jaco0646