View a markdown version of this page

Génération automatique de schémas JDBC - Amazon DocumentDB

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.

Génération automatique de schémas JDBC

Amazon DocumentDB est une base de données de documents et ne possède donc pas le concept de tables et de schémas. Cependant, les outils de BI tels que Tableau s'attendent à ce que la base de données qu'ils connectent présente un schéma. Plus précisément, lorsque la connexion au pilote JDBC doit obtenir le schéma de la collection dans la base de données, elle interroge toutes les collections de la base de données. Le pilote déterminera s'il existe déjà une version mise en cache du schéma pour cette collection. S'il n'existe pas de version mise en cache, elle échantillonnera la collection de documents et créera un schéma basé sur le comportement suivant.

Limites de génération de schémas

Le pilote JDBC DocumentDB impose une limite de 128 caractères à la longueur des identificateurs. Le générateur de schéma peut tronquer la longueur des identifiants générés (noms de tables et noms de colonnes) pour s'assurer qu'ils correspondent à cette limite.

Options de méthode de numérisation

Le comportement d'échantillonnage peut être modifié à l'aide des options de chaîne de connexion ou de source de données.

  • Méthode de numérisation = <option>

    • random - (par défaut) - Les exemples de documents sont renvoyés dans un ordre aléatoire.

    • IDForward - Les exemples de documents sont renvoyés par ordre d'identification.

    • idReverse - Les exemples de documents sont renvoyés dans l'ordre inverse de l'identifiant.

    • tout - Échantillonnez tous les documents de la collection.

  • ScanLimit= <n>- Le nombre de documents à échantillonner. La valeur doit être un nombre entier positif. La valeur par défaut est 1000. Si ScanMethod est défini sur all, cette option est ignorée.

Types de données Amazon DocumentDB

Le serveur Amazon DocumentDB prend en charge un certain nombre de types de données MongoDB. Les types de données pris en charge et les types de données JDBC associés sont répertoriés ci-dessous.

Type de données MongoDB Pris en charge dans DocumentDB Type de données JDBC
Données binaires Oui VARBINARY
Booléen Oui BOOLEAN
Double Oui DOUBLE
Entier 32 bits Oui INTEGER
Nombre entier 64 bits Oui BIGINT
String Oui VARCHAR
ObjectId Oui VARCHAR
Date Oui TIMESTAMP
Null Oui VARCHAR
Expression régulière Oui VARCHAR
Horodatage Oui VARCHAR
MinKey Oui VARCHAR
MaxKey Oui VARCHAR
Objet Oui table virtuelle
Tableau Oui table virtuelle
Decimal128 Non DECIMAL
JavaScript Non VARCHAR
JavaScript (avec lunette) Non VARCHAR
Non défini Non VARCHAR
Symbol Non VARCHAR
DBPointer (4.0 et versions ultérieures) Non VARCHAR

Mappage de champs de documents scalaires

Lors de la numérisation d'un échantillon de documents d'une collection, le pilote JDBC crée un ou plusieurs schémas pour représenter les échantillons de la collection. En général, un champ scalaire du document correspond à une colonne du schéma de la table. Par exemple, dans une collection nommée team et dans un seul document{ "_id" : "112233", "name" : "Alastair", "age": 25 }, cela correspondrait au schéma :

Nom de la table Nom de la colonne Type de données Clé
équipe identifiant de l'équipe VARCHAR PK
équipe name VARCHAR
équipe age INTEGER

Promotion des conflits liés aux types de données

Lors de la numérisation des échantillons de documents, il est possible que les types de données d'un champ ne soient pas cohérents d'un document à l'autre. Dans ce cas, le pilote JDBC fera passer le type de données JDBC à un type de données commun qui conviendra à tous les types de données des documents échantillonnés.

Par exemple :

{ "_id" : "112233", "name" : "Alastair", "age" : 25 } { "_id" : "112244", "name" : "Benjamin", "age" : "32" }

Le champ d'âge est de type entier 32 bits dans le premier document mais chaîne dans le second document. Ici, le pilote JDBC va promouvoir le type de données JDBC en VARCHAR pour gérer l'un ou l'autre type de données lorsqu'il est rencontré.

Nom de la table Nom de la colonne Type de données Clé
équipe identifiant de l'équipe VARCHAR PK
équipe name VARCHAR
équipe age VARCHAR

Scalar-scalar promotion des conflits

Le schéma suivant montre la manière dont les conflits de types de données scalaires-scalaires sont résolus.

Diagramme hiérarchique montrant comment les types de données conflictuels seront promus lorsqu'ils ne sont pas cohérents dans les documents.

Scalar-complex type de promotion des conflits

À l'instar des conflits de type scalaire-scalaire, le même champ dans différents documents peut contenir des types de données contradictoires entre complexe (tableau et objet) et scalaire (entier, booléen, etc.). Tous ces conflits sont résolus (promus) à VARCHAR pour ces domaines. Dans ce cas, les données des tableaux et des objets sont renvoyées sous forme de représentation JSON.

Exemple de conflit entre tableau intégré et champ de chaîne :

{ "_id":"112233", "name":"George Jackson", "subscriptions":[ "Vogue", "People", "USA Today" ] } { "_id":"112244", "name":"Joan Starr", "subscriptions":1 }

L'exemple précédent correspond au schéma de la table customer2 :

Nom de la table Nom de la colonne Type de données Clé
client 2 identifiant customer2 VARCHAR PK
client 2 name VARCHAR
client 2 abonnement VARCHAR

et la table virtuelle customer1_subscriptions :

Nom de la table Nom de la colonne Type de données Clé
client1_abonnements identifiant customer1 VARCHAR PK/FK
client1_abonnements index_abonnement_niveau_0 BIGINT PK
client1_abonnements value VARCHAR
customer_address city VARCHAR
customer_address region VARCHAR
customer_address country VARCHAR
customer_address code VARCHAR

Gestion des types de données d'objets et de tableaux

Jusqu'à présent, nous n'avons décrit que la façon dont les types de données scalaires sont mappés. Les types de données Object et Array sont (actuellement) mappés sur des tables virtuelles. Le pilote JDBC créera une table virtuelle pour représenter les champs d'objet ou de tableau d'un document. Le nom de la table virtuelle mappée concaténera le nom de la collection d'origine suivi du nom du champ séparé par un caractère de soulignement (« _ »).

La clé primaire de la table de base (« _id ») prend un nouveau nom dans la nouvelle table virtuelle et est fournie en tant que clé étrangère à la table de base associée.

Pour les champs de type tableau intégré, des colonnes d'index sont générées pour représenter l'indice dans le tableau à chaque niveau du tableau.

Exemple de champ d'objet intégré

Pour les champs d'objet d'un document, un mappage vers une table virtuelle est créé par le pilote JDBC.

{ "Collection: customer", "_id":"112233", "name":"George Jackson", "address":{ "address1":"123 Avenue Way", "address2":"Apt. 5", "city":"Hollywood", "region":"California", "country":"USA", "code":"90210" } }

L'exemple précédent correspond au schéma de la table des clients :

Nom de la table Nom de la colonne Type de données Clé
customer identifiant client VARCHAR PK
customer name VARCHAR

et la table virtuelle customer_address :

Nom de la table Nom de la colonne Type de données Clé
customer_address identifiant client VARCHAR PK/FK
customer_address adresse 1 VARCHAR
customer_address adresse 2 VARCHAR
customer_address city VARCHAR
customer_address region VARCHAR
customer_address country VARCHAR
customer_address code VARCHAR

Exemple de champ de tableau intégré

Pour les champs de tableau d'un document, un mappage vers une table virtuelle est également créé par le pilote JDBC.

{ "Collection: customer1", "_id":"112233", "name":"George Jackson", "subscriptions":[ "Vogue", "People", "USA Today" ] }

L'exemple précédent correspond au schéma de la table customer1 :

Nom de la table Nom de la colonne Type de données Clé
client 1 identifiant customer1 VARCHAR PK
client 1 name VARCHAR

et la table virtuelle customer1_subscriptions :

Nom de la table Nom de la colonne Type de données Clé
client1_abonnements identifiant customer1 VARCHAR PK/FK
client1_abonnements index_abonnement_niveau_0 BIGINT PK
client1_abonnements value VARCHAR
customer_address city VARCHAR
customer_address region VARCHAR
customer_address country VARCHAR
customer_address code VARCHAR