Le module Data Integration de DataWorks fournit le plug-in MongoDB Reader, qui permet de lire les données stockées dans MongoDB et de les synchroniser vers d'autres sources de données. Ce tutoriel vous guide pas à pas dans la synchronisation par lots des données de MongoDB vers MaxCompute.
Contexte
La source de données est MongoDB et la destination est MaxCompute. Avant de commencer, préparez les données MongoDB et créez une table de destination dans MaxCompute.
Prérequis
Assurez-vous que les conditions suivantes sont remplies :
Vous avez activé DataWorks et créé une source de données MaxCompute.
-
Ce tutoriel utilise un groupe de ressources exclusif pour Data Integration afin d'exécuter la tâche par lots. Vous devez acheter et configurer un groupe de ressources exclusif pour Data Integration. Pour plus d'informations, consultez la rubrique Utiliser un groupe de ressources exclusif pour Data Integration.
RemarqueVous pouvez également utiliser un groupe de ressources serverless. Pour plus d'informations, consultez la rubrique Utiliser un groupe de ressources serverless.
Préparer les exemples de données et les tables
Préparez une collection MongoDB et une table MaxCompute pour la synchronisation par lots.
-
Préparez une collection MongoDB.
Ce tutoriel prend ApsaraDB for MongoDB comme exemple. Le code suivant montre comment préparer la collection MongoDB.
-
Créez une collection nommée
di_mongodb_conf_test.db.createCollection('di_mongodb_conf_test') -
Insérez les exemples de données de ce tutoriel dans la collection.
db.di_mongodb_conf_test.insertOne({ 'col_string':'mock string value', 'col_int32':NumberInt("1"), 'col_int32_min':NumberInt("-2147483648"), 'col_int32_max':NumberInt("2147483647"), 'col_int64':NumberLong("1234567890123456"), 'col_int64_min':NumberLong("-9223372036854775807"), 'col_int64_max':NumberLong("9223372036854775807"), 'col_decimal':NumberDecimal("9999999.4999999999"), 'col_double':9999999.99, 'col_boolean':true, 'col_timestamp':ISODate(), 'col_date':new Date(), 'col_array_to_json':['a','b'], 'col_array_to_join':['a','b'], 'col_doc':{ 'key_string':'mock string value', 'key_int32':NumberInt("1"), 'key_int32_min':NumberInt("-2147483648"), 'key_int32_max':NumberInt("2147483647"), 'key_int64':NumberLong("1234567890123456"), 'key_int64_min':NumberLong("-9223372036854775807"), 'key_int64_max':NumberLong("9223372036854775807"), 'key_decimal':NumberDecimal("9999999.4999999999"), 'key_double':9999999.99, 'key_boolean':true, 'key_timestamp':ISODate(), 'key_date':new Date(), 'key_array_to_json':['a','b'], 'key_array_to_join':['a','b'], }, 'col_extra_1':'this is extra 1', 'col_extra_2':'this is extra 2', }) -
Interrogez les données insérées dans MongoDB.
db.getCollection("di_mongodb_conf_test").find({})Le résultat de la requête affiche un document de test dans la collection, avec un
_idégal à63dca714b8548a78e1dc3238. Ce document contient divers types de données : chaîne (col_string), entier (col_int32/col_int64), nombre à virgule flottante (col_double/col_decimal), booléen (col_boolean), date/heure (col_date/col_timestamp) et tableau (col_array_to_join/col_array_to_json). Il inclut également un document imbriqué,col_doc, ainsi que deux champs supplémentaires,col_extra_1etcol_extra_2.
-
-
Préparez une table MaxCompute.
-
Créez une table partitionnée nommée
di_mongodb_conf_testavecptcomme champ de partition.CREATE TABLE IF NOT EXISTS di_mongodb_conf_test ( `id` STRING ,`col_string` STRING ,`col_int32` INT ,`col_int32_min` INT ,`col_int32_max` INT ,`col_int64` BIGINT ,`col_int64_min` BIGINT ,`col_int64_max` BIGINT ,`col_decimal` DECIMAL(38,18) ,`col_double` DOUBLE ,`col_boolean` BOOLEAN ,`col_timestamp` TIMESTAMP ,`col_date` DATE ,`col_array_to_json` STRING ,`col_array_to_join` STRING ,`key_string` STRING ,`key_int32` INT ,`key_int32_min` INT ,`key_int32_max` INT ,`key_int64` BIGINT ,`key_int64_min` BIGINT ,`key_int64_max` BIGINT ,`key_decimal` DECIMAL(38,18) ,`key_double` DOUBLE ,`key_boolean` BOOLEAN ,`key_timestamp` TIMESTAMP ,`key_date` DATE ,`key_array_to_json` STRING ,`key_array_to_join` STRING ,`col_doc` STRING ,`col_combine` STRING ) PARTITIONED BY ( pt STRING ) LIFECYCLE 36500 ; -
Ajoutez une partition avec la valeur
20230202.alter table di_mongodb_conf_test add if not exists partition (pt='20230202'); -
Vérifiez que la table partitionnée a été créée correctement.
SELECT*FROM di_mongodb_conf_test WHEREpt='20230202';
-
Configurer la tâche de synchronisation par lots
Étape 1 : Ajouter une source de données MongoDB
Ajoutez une source de données MongoDB et assurez-vous que la connectivité réseau est établie entre la source de données et le groupe de ressources exclusif pour Data Integration. Pour plus d'informations, consultez la rubrique Ajouter une source de données MongoDB.
Étape 2 : Créer et configurer un nœud de synchronisation par lots
Dans DataStudio de DataWorks, créez un nœud de synchronisation par lots et configurez sa source et sa destination. Seuls les paramètres clés sont mis en évidence ci-dessous ; conservez les valeurs par défaut pour les autres. Pour obtenir des instructions détaillées, consultez la rubrique Configurer un nœud de synchronisation par lots à l'aide de l'interface sans code.
-
Configurez la connexion réseau.
Sélectionnez les sources de données MongoDB et MaxCompute, ainsi que le groupe de ressources exclusif correspondant pour Data Integration, puis testez la connectivité.
-
Configurez la tâche : sélectionnez les sources de données.
Pour la source et la destination, sélectionnez respectivement la collection MongoDB et la table MaxCompute partitionnée.
-
Configurez la tâche : mappez les champs.
Lorsque la source de données est MongoDB, l'option Map Fields in Same Row est utilisée par défaut. Vous pouvez également cliquer sur l'icône
pour modifier manuellement les champs de la table source. L'exemple suivant illustre cette modification manuelle.{"name":"_id","type":"string"} {"name":"col_string","type":"string"} {"name":"col_int32","type":"long"} {"name":"col_int32_min","type":"long"} {"name":"col_int32_max","type":"long"} {"name":"col_int64","type":"long"} {"name":"col_int64_min","type":"long"} {"name":"col_int64_max","type":"long"} {"name":"col_decimal","type":"double"} {"name":"col_double","type":"double"} {"name":"col_boolean","type":"boolean"} {"name":"col_timestamp","type":"date"} {"name":"col_date","type":"date"} {"name":"col_array_to_json","type":"string"} {"name":"col_array_to_join","type":"array","splitter":","} {"name":"col_doc.key_string","type":"document.string"} {"name":"col_doc.key_int32","type":"document.long"} {"name":"col_doc.key_int32_min","type":"document.long"} {"name":"col_doc.key_int32_max","type":"document.long"} {"name":"col_doc.key_int64","type":"document.long"} {"name":"col_doc.key_int64_min","type":"document.long"} {"name":"col_doc.key_int64_max","type":"document.long"} {"name":"col_doc.key_decimal","type":"document.double"} {"name":"col_doc.key_double","type":"document.double"} {"name":"col_doc.key_boolean","type":"document.boolean"} {"name":"col_doc.key_timestamp","type":"document.date"} {"name":"col_doc.key_date","type":"document.date"} {"name":"col_doc.key_array_to_json","type":"document"} {"name":"col_doc.key_array_to_join","type":"document.array","splitter":","} {"name":"col_doc","type":"string"} {"name":"col_combine","type":"combine"}Une fois les champs modifiés, l'interface utilisateur affiche le mappage entre les champs source et destination.
Étape 3 : Valider et déployer le nœud
Si vous utilisez un espace de travail en mode standard et souhaitez planifier cette tâche, validez et déployez le nœud dans l'environnement de production. Pour plus d'informations, consultez la rubrique Déployer des tâches.
Étape 4 : Exécuter le nœud et afficher le résultat
Après avoir configuré le nœud, exécutez-le. Une fois la tâche terminée, consultez les données synchronisées dans la table MaxCompute. Les données synchronisées comprennent les champs et valeurs suivants : col_string (mock string value), col_int32 (1), col_int32_min (-2147483648), col_int32_max (2147483647), col_int64 (1234567890123456), col_decimal (9999999.4999999999), col_double (9999999.99), col_boolean (true), col_timestamp (2023-02-03 14:17:56.554), col_date (2023-02-03), col_array_to_json ([a, b]), col_array_to_join (a,b) et pt (20230202). Certains champs numériques sont stockés sous forme de texte. Les valeurs des champs complexes sont les suivantes :
-
Le contenu du champ
col_docest le suivant.{ "key_array_to_join": [ "a", "b" ], "key_array_to_json": [ "a", "b" ], "key_boolean": true, "key_date": "2023-02-03 14:17:56", "key_decimal": { "finite": true, "high": 34711494127958097792, "infinite": false, "low": 99999994999999999, "naN": false, "negative": false }, "key_double": 9999999.99, "key_int32": 1, "key_int32_max": 2147483647, "key_int32_min": -2147483648, "key_int64": 1234567890123456, "key_int64_max": 9223372036854775807, "key_int64_min": -9223372036854775807, "key_string": "mock string value", "key_timestamp": "2023-02-03 14:17:56" } -
Le contenu du champ
col_combineest le suivant.{ "col_extra_1": "this is extra 1", "col_extra_2": "this is extra 2" }
Pour plus d'informations sur les problèmes liés à la sortie des données de type Decimal, consultez la rubrique Annexe 2 : Gérer la sortie du type Decimal dans les documents.
Annexe 1 : Conversion du format des données
Convertir les données de type tableau au format JSON : col_array_to_json
|
Données source MongoDB |
Configuration du mappage des champs |
Sortie vers MaxCompute |
|
Dans la configuration du mappage des champs, si |
|
Convertir un tableau en une chaîne concaténée : col_array_to_join
|
Données source MongoDB |
Configuration du mappage des champs |
Sortie vers MaxCompute |
|
Lors de la configuration du mappage des champs, le paramètre |
|
Synchroniser les champs de documents imbriqués
|
Données source MongoDB |
Configuration du mappage des champs |
Sortie vers MaxCompute |
|
|
|
Sérialiser un document sous forme de chaîne JSON
|
Données source MongoDB |
Configuration du mappage des champs |
Sortie vers MaxCompute |
|
Lors de la configuration du mappage des champs, si le |
|
Sérialiser les champs non mappés au format JSON
|
Données source MongoDB |
Configuration du mappage des champs |
Sortie vers MaxCompute |
|
Ce document comporte quatre champs. |
|
Annexe 2 : Sortie du type Decimal
Lorsqu'un document est sérialisé au format JSON, les données Decimal128 sont produites par défaut selon le format suivant :
{
"key_decimal":
{
"finite": true,
"high": 3471149412795809792,
"infinite": false,
"low": 99999994999999999,
"naN": false,
"negative": false
}
}
Pour produire les données sous forme de type numérique, procédez comme suit :
Lors de la configuration de la tâche de synchronisation par lots, basculez vers le mode script.
-
Modifiez la configuration de la tâche Reader : dans la section des paramètres, ajoutez le paramètre
decimal128OutputTypeet définissez sa valeur surbigDecimal."parameter": { "collectionName": "di_mongodb_conf_test", "decimal128OutputType":"bigDecimal" }, "name": "Reader", "category": "reader" -
Exécutez à nouveau la tâche de synchronisation par lots et consultez le résultat.
{ "key_decimal": "9999999.4999999999" }