Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
AWS GlueRegistre de schémas
Note
AWS GlueLe registre des schémas n'est pas pris en charge dans les régions suivantes de la AWS Glue console : Asie-Pacifique (Jakarta) et Moyen-Orient (UAE).
Le registre des AWS Glue schémas vous permet de découvrir, de contrôler et de faire évoluer les schémas de flux de données de manière centralisée. Un schéma définit la structure et le format d'un enregistrement de données. Avec AWS Glue Schema Registry, vous pouvez gérer et appliquer des schémas sur vos applications de streaming de données à l'aide d'intégrations pratiques avec Apache Kafka Amazon Managed Streaming for Apache Kafka
Le registre des schémas prend en charge le format de données AVRO (v1.10.2), le format de JSON données avec le format de JSON schémaextensions
ou, et le support du langage Java, avec d'autres formats de données et langages à venir. groups
Les fonctionnalités prises en charge incluent la compatibilité, l'approvisionnement en schémas via des métadonnées, l'enregistrement automatique des schémas, la IAM compatibilité et la ZLIB compression optionnelle pour réduire le stockage et le transfert de données. Le registre Schema est sans serveur et peut être utilisé gratuitement.
L'utilisation d'un schéma comme contrat de format de données entre applications producteur et consommateur conduit à une meilleure gouvernance des données, à une meilleure qualité des données, et permet aux applications consommateur de données d'être résilientes face aux changements compatibles en amont.
Le registre des schémas permet à des systèmes disparates de partager un schéma pour la sérialisation et la désérialisation. Par exemple, supposons que vous ayez un producteur et un consommateur de données. Le producteur connaît le schéma lorsqu'il publie les données. Le registre des schémas fournit un sérialiseur et un désérialiseur pour certains systèmes tels qu'Amazon ou Apache Kafka. MSK
Pour de plus amples informations, veuillez consulter Fonctionnement du registre des schémas.
Rubriques
- Schémas
- Registres
- Gestion des versions et compatibilité des schémas
- Bibliothèques Serde en open source
- Quotas du registre des schémas
- Fonctionnement du registre des schémas
- Commencer à utiliser le registre des schémas
- Intégration à AWS Glue Registre de schémas
- Migration d'un registre de schémas tiers vers le registre de schémas AWS Glue
Schémas
Un schéma définit la structure et le format d'un enregistrement de données. Un schéma est une spécification versionnée pour la publication, la consommation ou le stockage des données fiables.
Dans cet exemple de schéma pour Avro, le format et la structure sont définis par la disposition et les noms de champs, tandis que le format des noms de champs est défini par les types de données (par exemple, string
, int
).
{ "type": "record", "namespace": "ABC_Organization", "name": "Employee", "fields": [ { "name": "Name", "type": "string" }, { "name": "Age", "type": "int" }, { "name": "address", "type": { "type": "record", "name": "addressRecord", "fields": [ { "name": "street", "type": "string" }, { "name": "zipcode", "type": "int" } ] } } ] }
{ "$id": "https://example.com/person.schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Person", "type": "object", "properties": { "firstName": { "type": "string", "description": "The person's first name." }, "lastName": { "type": "string", "description": "The person's last name." }, "age": { "description": "Age in years which must be equal to or greater than zero.", "type": "integer", "minimum": 0 } } }
Dans cet exemple pour Protobuf, le format est défini par la version 2 du langage Protocol Buffers (proto2)
syntax = "proto2"; package tutorial; option java_multiple_files = true; option java_package = "com.example.tutorial.protos"; option java_outer_classname = "AddressBookProtos"; message Person { optional string name = 1; optional int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; }
Registres
Un registre est un conteneur logique de schémas. Les registres vous permettent d'organiser vos schémas, ainsi que de gérer le contrôle des accès pour vos applications. Un registre possède un Amazon Resource Name (ARN) qui vous permet d'organiser et de définir différentes autorisations d'accès pour les opérations de schéma au sein du registre.
Vous pouvez utiliser le registre par défaut ou créer autant de registres que nécessaire.
|
|
|
|
Gestion des versions et compatibilité des schémas
Chaque schéma peut avoir plusieurs versions. La gestion des versions est régie par une règle de compatibilité appliquée à un schéma. Les demandes d'enregistrement de nouvelles versions de schéma sont vérifiées par rapport à cette règle par le registre de schémas avant qu'elles ne puissent aboutir.
Une version de schéma qui est marquée comme point de contrôle est utilisée pour déterminer la compatibilité de l'enregistrement de nouvelles versions d'un schéma. Lorsqu'un schéma est créé pour la première fois, le point de contrôle par défaut sera la première version. Au fur et à mesure que le schéma évolue avec de nouvelles versions, vous pouvez utiliser leCLI/SDKpour remplacer le point de contrôle par une version d'un schéma respectant un ensemble de contraintes. UpdateSchema
API Dans la console, la modification de la définition du schéma ou du mode de compatibilité modifiera le point de contrôle vers la dernière version par défaut.
Les modes de compatibilité vous permettent de contrôler la manière dont les schémas peuvent ou ne peuvent pas évoluer au fil du temps. Ces modes constituent le contrat entre les applications produisant et consommant des données. Lorsqu'une nouvelle version d'un schéma est envoyée au registre, la règle de compatibilité appliquée au nom du schéma est utilisée pour déterminer si la nouvelle version peut être acceptée. Il existe 8 modes de compatibilité : NONEDISABLED,BACKWARD,ALL, BACKWARD _FORWARD,ALL, FORWARD _FULL, FULL _ALL.
Au format de données Avro, les champs peuvent être facultatifs ou obligatoires. Un champ facultatif est celui dans lequel le champ Type
inclut une valeur null. Les champs obligatoires n'ont pas de valeur nulle comme Type
.
Dans le format de données Protobuf, les champs peuvent être facultatifs (y compris ceux répétés) ou obligatoires dans la syntaxe proto2, tandis que tous les champs sont facultatifs (y compris ceux répétés) dans la syntaxe proto3. Toutes les règles de compatibilité sont déterminées en fonction de la compréhension des spécifications de Protocol Buffers, ainsi que des directives de la Documentation Protocol Buffers de Google
NONE: aucun mode de compatibilité ne s'applique. Vous pouvez utiliser ce choix dans les scénarios de développement ou si vous ne connaissez pas les modes de compatibilité que vous souhaitez appliquer aux schémas. Toute nouvelle version ajoutée sera acceptée sans faire l'objet d'un contrôle de compatibilité.
DISABLED: ce choix de compatibilité empêche le versionnement d'un schéma particulier. Aucune nouvelle version ne peut être ajoutée.
BACKWARD: Ce choix de compatibilité est recommandé car il permet aux utilisateurs de lire à la fois la version actuelle et la version précédente du schéma. Vous pouvez utiliser ce choix pour vérifier la compatibilité par rapport à la version précédente du schéma lorsque vous supprimez des champs ou ajoutez des champs facultatifs. Un cas d'utilisation typique BACKWARD est celui où votre application a été créée pour le schéma le plus récent.
AVRO
Par exemple, supposons que vous avez un schéma défini par le prénom (obligatoire), le nom (obligatoire), l'adresse électronique (obligatoire) et le numéro de téléphone (facultatif).
Si votre prochaine version de schéma supprime le champ d'adresse électronique requis, l'enregistrement s'effectue correctement. BACKWARDla compatibilité exige que les consommateurs soient en mesure de lire la version actuelle et précédente du schéma. Vos applications consommateur seront en mesure de lire le nouveau schéma, car le champ d'adresse électronique supplémentaire des anciens messages est ignoré.
Si vous avez proposé une nouvelle version de schéma qui ajoute un champ obligatoire, par exemple un code postal, cela ne sera pas correctement enregistré avec BACKWARD compatibilité. Vos applications consommateur sur la nouvelle version ne seraient pas en mesure de lire les anciens messages avant la modification du schéma, car elles ne disposent pas du champ de code postal requis. Toutefois, si le champ de code postal a été défini comme facultatif dans le nouveau schéma, la version proposée s'enregistrerait avec succès, car les applications consommateur peuvent lire l'ancien schéma sans le champ de code postal facultatif.
JSON
Par exemple, supposons que vous avez une version de schéma définie par le prénom (facultatif), le nom de famille (facultatif), l'adresse électronique (facultatif) et le numéro de téléphone (facultatif).
Si votre prochaine version de schéma ajoute la propriété de numéro de téléphone facultative, elle s'enregistrera avec succès tant que la version de schéma d'origine n'autorise aucune propriété supplémentaire en définissant le champ
additionalProperties
sur false. BACKWARDla compatibilité exige que les consommateurs soient en mesure de lire la version actuelle et précédente du schéma. Vos applications consommateur seront en mesure de lire les données produites avec le schéma d'origine où la propriété de numéro de téléphone n'existe pas.Si vous avez proposé une nouvelle version de schéma qui ajoute la propriété optionnelle du numéro de téléphone, cela ne sera pas correctement enregistré avec BACKWARD compatibilité lorsque la version originale du schéma définit le
additionalProperties
champ sur true, c'est-à-dire en autorisant toute propriété supplémentaire. Vos applications consommateur sur la nouvelle version ne seraient pas en mesure de lire les anciens messages avant le changement de schéma, car elles ne peuvent pas lire les données avec la propriété de numéro de téléphone dans un type différent, par exemple une chaîne au lieu d'un numéro.PROTOBUF
Par exemple, imaginez que vous avez une version de schéma définie par un message
Person
avecfirst name
(obligatoire),last name
(obligatoire),email
(obligatoire) et le champphone number
(facultatifs) sous la syntaxe proto2.Comme dans le AVRO cas des scénarios, si votre prochaine version de schéma supprime le
email
champ obligatoire, cela sera enregistré avec succès. BACKWARDla compatibilité exige que les consommateurs soient en mesure de lire la version actuelle et précédente du schéma. Les consommateurs seront en mesure de lire le nouveau schéma, car le champ supplémentaireemail
des anciens messages est ignoré.Si vous avez proposé une nouvelle version de schéma qui ajoute un champ obligatoire, par exemple
zip code
, cela ne sera pas correctement enregistré avec BACKWARD compatibilité. Les consommateurs sur la nouvelle version ne seraient pas en mesure de lire les anciens messages avant la modification du schéma, car ils ne disposent pas du champ requiszip code
. Toutefois, si le champzip code
a été défini comme facultatif dans le nouveau schéma, l'enregistrement de la version proposée s'effectue correctement, car les consommateurs peuvent lire l'ancien schéma sans le champ facultatifzip code
.Dans le cas d'un cas d'RPCutilisation g, l'ajout d'un nouveau RPC service ou d'une nouvelle RPC méthode constitue une modification rétrocompatible. Supposons, par exemple, que vous disposiez d'une version de schéma définie par un RPC service
MyService
avec deux RPC méthodesFoo
etBar
.Si votre prochaine version de schéma ajoute une nouvelle RPC méthode appelée
Baz
, celle-ci sera enregistrée avec succès. Vos consommateurs pourront lire les données produites avec le schéma d'origine en fonction de la BACKWARD compatibilité, car la RPC méthode nouvellement ajoutéeBaz
est facultative.Si vous avez proposé une nouvelle version de schéma qui supprime la RPC méthode existante
Foo
, cela ne sera pas correctement enregistré avec BACKWARD compatibilité. Dans la nouvelle version, vos clients ne seront pas en mesure de lire les anciens messages avant le changement de schéma, car ils ne peuvent ni comprendre ni lire les données avec la RPC méthode inexistanteFoo
dans une RPC application g.BACKWARD_ ALL : Ce choix de compatibilité permet aux consommateurs de lire à la fois la version actuelle et toutes les versions précédentes du schéma. Vous pouvez utiliser ce choix pour vérifier la compatibilité avec toutes les versions de schéma précédentes lorsque vous supprimez des champs ou ajoutez des champs facultatifs.
FORWARD: Ce choix de compatibilité permet aux consommateurs de lire à la fois les versions actuelles et suivantes du schéma, mais pas nécessairement les versions ultérieures. Vous pouvez utiliser ce choix pour vérifier la compatibilité avec la dernière version de schéma lorsque vous ajoutez des champs ou supprimez des champs facultatifs. Un cas d'utilisation typique FORWARD est celui où votre application a été créée pour un schéma précédent et devrait être capable de traiter un schéma plus récent.
AVRO
Par exemple, supposons que vous avez une version de schéma définie par le prénom (obligatoire), le nom (obligatoire) et l'adresse électronique (facultatif).
Si vous disposez d'une nouvelle version de schéma qui ajoute un champ obligatoire ; par exemple, un numéro de téléphone, l'enregistrement s'effectue correctement. FORWARDla compatibilité exige que les consommateurs soient en mesure de lire les données produites avec le nouveau schéma en utilisant la version précédente.
Si vous avez proposé une version de schéma qui supprime le champ de prénom requis, cela ne sera pas correctement enregistré avec FORWARD compatibilité. Vos applications consommateur sur la version précédente ne seraient pas en mesure de lire les schémas proposés, car elles ne disposent pas du champ de prénom obligatoire. Toutefois, si le champ de prénom était initialement facultatif, le nouveau schéma proposé s'enregistrerait correctement, car les applications consommateur peuvent lire des données basées sur le nouveau schéma qui ne dispose pas du champ de prénom facultatif.
JSON
Par exemple, supposons que vous avez une version de schéma définie par le prénom (facultatif), le nom de famille (facultatif), l'adresse électronique (facultatif) et le numéro de téléphone (facultatif).
Si vous disposez d'une nouvelle version de schéma qui supprime la propriété de numéro de téléphone facultative, elle s'enregistrera avec succès tant que la nouvelle version de schéma n'autorise aucune propriété supplémentaire en définissant le champ
additionalProperties
sur false. FORWARDla compatibilité exige que les consommateurs soient en mesure de lire les données produites avec le nouveau schéma en utilisant la version précédente.Si vous avez proposé une version de schéma qui supprime la propriété optionnelle du numéro de téléphone, elle ne sera pas correctement enregistrée avec FORWARD compatibilité lorsque la nouvelle version du schéma définit le
additionalProperties
champ sur true, c'est-à-dire en autorisant toute propriété supplémentaire. Vos applications consommateur sur la version précédente ne seraient pas en mesure de lire les schémas proposés, car elles pourraient avoir la propriété de numéro de téléphone dans un type différent, par exemple une chaîne au lieu d'un numéro.PROTOBUF
Par exemple, imaginez que vous avez une version de schéma définie par un message
Person
avec des champsfirst name
(obligatoire),last name
(obligatoire),email
(facultatif) sous la syntaxe proto2.Comme dans les AVRO scénarios, si vous avez une nouvelle version du schéma qui ajoute un champ obligatoire, par exemple
phone number
, cela sera enregistré avec succès. FORWARDla compatibilité exige que les consommateurs soient en mesure de lire les données produites avec le nouveau schéma en utilisant la version précédente.Si vous avez proposé une version de schéma qui supprime le
first name
champ obligatoire, cela ne sera pas correctement enregistré avec FORWARD compatibilité. Les consommateurs sur la version précédente ne seraient pas en mesure de lire les schémas proposés, car le champ obligatoirefirst name
est absent. Toutefois, si le champfirst name
était initialement facultatif, l'enregistrement du nouveau schéma proposé s'effectue correctement, car les consommateurs peuvent lire des données basées sur le nouveau schéma où le champ facultatiffirst name
est absent.Dans le cas d'un cas d'RPCutilisation g, la suppression d'un RPC service ou d'une RPC méthode constitue une modification compatible avec le futur. Supposons, par exemple, que vous disposiez d'une version de schéma définie par un RPC service
MyService
avec deux RPC méthodesFoo
etBar
.Si votre prochaine version de schéma supprime la RPC méthode existante nommée
Foo
, celle-ci sera correctement enregistrée conformément à la FORWARD compatibilité, car les consommateurs peuvent lire les données produites avec le nouveau schéma en utilisant la version précédente. Si vous avez proposé une nouvelle version de schéma qui ajoute une RPC méthodeBaz
, celle-ci ne sera pas correctement enregistrée avec FORWARD compatibilité. Dans la version précédente, vos clients ne pourraient pas lire les schémas proposés car ils ne disposent pas de la RPC méthodeBaz
.FORWARD_ ALL : Ce choix de compatibilité permet aux consommateurs de lire les données écrites par les producteurs de tout nouveau schéma enregistré. Vous pouvez utiliser ce choix lorsque vous devez ajouter des champs ou supprimer des champs facultatifs, et vérifier la compatibilité avec à toutes les versions de schéma précédentes.
FULL: ce choix de compatibilité permet aux consommateurs de lire les données écrites par les producteurs à l'aide de la version précédente ou suivante du schéma, mais pas des versions antérieures ou ultérieures. Vous pouvez utiliser ce choix pour vérifier la compatibilité avec la dernière version de schéma lorsque vous ajoutez ou supprimez des champs facultatifs.
FULL_ ALL : Ce choix de compatibilité permet aux consommateurs de lire les données écrites par les producteurs en utilisant toutes les versions de schéma précédentes. Vous pouvez utiliser ce choix pour vérifier la compatibilité par rapport à toutes les versions de schéma précédentes lorsque vous ajoutez ou supprimez des champs facultatifs.
Bibliothèques Serde en open source
AWS fournit des bibliothèques Serde open source comme framework pour la sérialisation et la désérialisation des données. La conception open source de ces bibliothèques permet aux applications et aux cadres open source communs de prendre en charge ces bibliothèques dans leurs projets.
Pour plus de détails sur le fonctionnement des bibliothèques Serde, veuillez consulter Fonctionnement du registre des schémas.
Quotas du registre des schémas
Les quotas, également appelés limites dans AWS, sont les valeurs maximales pour les ressources, les actions et les éléments de votre AWS compte. Voici des limites logicielles pour le registre de schémas dans AWS Glue.
Paires clé-valeur des métadonnées de version de schéma
Vous pouvez avoir jusqu'à 10 paires clé-valeur SchemaVersion par région. AWS
Vous pouvez afficher ou définir les paires de métadonnées clé-valeur à l'aide du QuerySchemaVersionMetadata action (Python : query_schema_version_metadata) ou. PutSchemaVersionMetadata action (Python : put_schema_version_metadata) APIs
Voici des limites matérielles pour le registre de schémas dans AWS Glue.
Registres
Vous pouvez avoir jusqu'à 100 registres par AWS région pour ce compte.
SchemaVersion
Vous pouvez avoir jusqu'à 10 000 versions de schéma par AWS région pour ce compte.
Chaque nouveau schéma crée une nouvelle version du schéma. Vous pouvez donc théoriquement avoir jusqu'à 10 000 schémas par compte et par région, si chaque schéma ne possède qu'une seule version.
Charges utiles de schéma
Il existe une limite de taille de 170 Ko pour les charges utiles de schéma.