DataWorks Data Integration met à disposition le plug-in MongoDB Reader, qui permet de lire des données depuis MongoDB et de les synchroniser vers d'autres sources de données. Ce tutoriel vous guide pas à pas dans la synchronisation par lots de 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
Vérifiez 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 Utiliser un groupe de ressources exclusif pour Data Integration.
RemarqueVous pouvez également utiliser un groupe de ressources serverless. Pour plus d'informations, consultez 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 utilise ApsaraDB for MongoDB à titre d'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 de la connectivité réseau entre la source de données et le groupe de ressources exclusif pour Data Integration. Pour plus d'informations, consultez Ajouter une source de données MongoDB.
Étape 2 : Créer et configurer un nœud de synchronisation par lots
Dans DataWorks DataStudio, 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 ; utilisez les valeurs par défaut pour les autres. Pour des instructions détaillées, consultez 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 pour Data Integration correspondant, puis testez la connectivité.
-
Configurez la tâche : sélectionnez les sources de données.
Pour la source et la destination, sélectionnez 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 une 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"}Après avoir modifié les champs, 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 Déployer des tâches.
Étape 4 : Exécuter le nœud et consulter le résultat
Une fois le nœud configuré, exécutez-le. Lorsque la tâche est terminée, consultez les données synchronisées dans la table MaxCompute. Les données synchronisées incluent 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 obtenir des informations sur les problèmes liés à la sortie des données de type Decimal, consultez Annexe 2 : Gérer la sortie du type Decimal dans les documents.
Annexe 1 : Conversion du format de données
Convertir les données de 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 jointe : 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 |
|
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 au 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, suivez ces étapes :
Lors de la configuration de la tâche de synchronisation par lots, basculez en 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" }