Tous les produits
Search
Centre de documentation

DataWorks:Lire des données depuis MongoDB à l'aide de la synchronisation par lots

Dernière mise à jour :Aug 10, 2026

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.

    Remarque

    Vous 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.

  1. Préparez une collection MongoDB.

    Ce tutoriel prend ApsaraDB for MongoDB comme exemple. Le code suivant montre comment préparer la collection MongoDB.

    1. Créez une collection nommée di_mongodb_conf_test.

      db.createCollection('di_mongodb_conf_test')
    2. 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',
      })
    3. 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_1 et col_extra_2.

  2. Préparez une table MaxCompute.

    1. Créez une table partitionnée nommée di_mongodb_conf_test avec pt comme 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
      ;
    2. Ajoutez une partition avec la valeur 20230202.

      alter table di_mongodb_conf_test add if not exists partition (pt='20230202');
    3. 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.

  1. 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é.

  2. 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.

  3. 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 icon 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_doc est 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_combine est le suivant.

    {
      "col_extra_1": "this is extra 1",
      "col_extra_2": "this is extra 2"
    }
Remarque

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

{
    "col_array_to_json":
    [
        "a",
        "b"
    ]
}
{"name":"col_array_to_json","type":"string"}

Dans la configuration du mappage des champs, si type est défini sur string, la tâche de synchronisation sérialise les données d'origine au format JSON pour la sortie lors de l'exécution.

[a, b]

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

{
    "col_array_to_join":
    [
        "a",
        "b"
    ]
}
{"name":"col_array_to_join","type":"array","splitter":","}

Lors de la configuration du mappage des champs, le paramètre splitter est requis si le type est défini sur array. Lors de l'exécution de la tâche de synchronisation, le contenu du tableau des données source est joint à l'aide du séparateur, et la sortie finale est la chaîne concaténée.

a,b

Synchroniser les champs de documents imbriqués

Données source MongoDB

Configuration du mappage des champs

Sortie vers MaxCompute

{
    "col_doc":
    {
        "key_string": "mock string value"
    }
}
{"name":"col_doc.key_string","type":"document.string"}

name spécifie le path du champ à synchroniser dans le document. Lors de l'exécution de la tâche de synchronisation, le système lit le document en fonction du path et produit les données.

mock string value

Sérialiser un document sous forme de chaîne JSON

Données source MongoDB

Configuration du mappage des champs

Sortie vers MaxCompute

{
    "col_doc":
    {
        "key_string": "mock string value",
        "key_int32": 1
    }
}
{"name":"col_doc","type":"string"}

Lors de la configuration du mappage des champs, si le type est défini sur string, la tâche de synchronisation sérialise l'intégralité de col_doc en une chaîne JSON et la produit lors de l'exécution.

{"key_string":"mockstringvalue","key_int32":1}

Sérialiser les champs non mappés au format JSON

Données source MongoDB

Configuration du mappage des champs

Sortie vers MaxCompute

{
    "col_1": "value1",
    "col_2": "value2",
    "col_3": "value3",
    "col_4": "value4"
}
{"name":"col_1","type":"string"}
{"name":"col_2","type":"string"}
{"name":"col_combine","type":"combine"}

Ce document comporte quatre champs. col_1 et col_2 sont explicitement mappés. Pendant la synchronisation, les champs restants non mappés (col_3 et col_4) sont sérialisés dans un objet JSON et produits en sortie.

{"col_3":"value3","col_4":"value4"}

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 :

  1. Lors de la configuration de la tâche de synchronisation par lots, basculez vers le mode script.

  2. Modifiez la configuration de la tâche Reader : dans la section des paramètres, ajoutez le paramètre decimal128OutputType et définissez sa valeur sur bigDecimal.

    "parameter": {
        "collectionName": "di_mongodb_conf_test",
        "decimal128OutputType":"bigDecimal"
    },
    "name": "Reader",
    "category": "reader"
  3. Exécutez à nouveau la tâche de synchronisation par lots et consultez le résultat.

    {
        "key_decimal": "9999999.4999999999"
    }