Todos los productos
Search
Centro de documentos

DataWorks:Lectura de datos de MongoDB mediante sincronización por lotes

Última actualización: Sep 25, 2026

DataWorks Data Integration proporciona el plugin MongoDB Reader para leer datos de MongoDB y sincronizarlos con otros orígenes de datos. Este tutorial le muestra cómo sincronizar datos por lotes desde MongoDB hacia MaxCompute.

Contexto

El origen de datos es MongoDB y el destino es MaxCompute. Antes de empezar, prepare los datos en MongoDB y cree una tabla de destino en MaxCompute.

Requisitos previos

Asegúrese de cumplir con los siguientes requisitos:

  • Activó DataWorks y creó un origen de datos de MaxCompute.

  • Este tutorial utiliza un resource group exclusivo para Data Integration con el fin de ejecutar la tarea por lotes. Debe comprar y configurar un resource group exclusivo para Data Integration. Para obtener más información, consulte Use an exclusive resource group for Data Integration.

    Nota

    También puede usar un resource group serverless. Para obtener más información, consulte Use a serverless resource group.

Preparación de datos y tablas de ejemplo

Prepare una colección de MongoDB y una tabla de MaxCompute para la sincronización por lotes.

  1. Prepare una colección de MongoDB.

    Este tutorial usa ApsaraDB for MongoDB como ejemplo. A continuación se muestra el código para preparar la colección de MongoDB.

    1. Cree una colección llamada di_mongodb_conf_test.

      db.createCollection('di_mongodb_conf_test')
    2. Inserte los datos de ejemplo de este tutorial en la colección.

      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. Consulte los datos insertados en MongoDB.

      db.getCollection("di_mongodb_conf_test").find({})

      El resultado de la consulta muestra un documento de prueba en la colección, cuyo _id es 63dca714b8548a78e1dc3238. Este documento contiene diversos tipos de datos: cadena (col_string), entero (col_int32/col_int64), punto flotante (col_double/col_decimal), booleano (col_boolean), fecha y hora (col_date/col_timestamp) y arreglo (col_array_to_join/col_array_to_json). También incluye un documento anidado, col_doc, y dos campos adicionales, col_extra_1 y col_extra_2.

  2. Prepare una tabla de MaxCompute.

    1. Cree una tabla particionada llamada di_mongodb_conf_test con pt como campo de partición.

      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. Agregue una partición con el valor 20230202.

      alter table di_mongodb_conf_test add if not exists partition (pt='20230202');
    3. Compruebe que la tabla particionada se haya creado correctamente.

      SELECT*FROM di_mongodb_conf_test
      WHEREpt='20230202';

Configuración de la tarea de sincronización por lotes

Paso 1: Agregar un origen de datos de MongoDB

Agregue un origen de datos de MongoDB y asegúrese de que exista conectividad de red entre dicho origen y el resource group exclusivo para Data Integration. Para obtener más información, consulte Add a MongoDB data source.

Paso 2: Crear y configurar un nodo de sincronización por lotes

En DataWorks DataStudio, cree un nodo de sincronización por lotes y configure su origen y destino. A continuación se destacan únicamente los parámetros clave; para los demás, utilice los valores predeterminados. Para consultar las instrucciones detalladas, consulte Configure a batch synchronization node using the Codeless UI.

  1. Configure la conexión de red.

    Seleccione los orígenes de datos de MongoDB y MaxCompute junto con el resource group exclusivo correspondiente para Data Integration. Después, pruebe la conectividad.

  2. Configure la tarea: seleccione los orígenes de datos.

    Para el origen y el destino, seleccione la colección de MongoDB y la tabla particionada de MaxCompute.

  3. Configure la tarea: asigne los campos.

    Cuando el origen de datos es MongoDB, se utiliza de forma predeterminada la opción Map Fields in Same Row. También puede hacer clic en el ícono icon para editar manualmente los campos de la tabla de origen. A continuación se muestra un ejemplo de edición manual.

    {"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"}

    Una vez editados los campos, la interfaz muestra la asignación entre los campos de origen y de destino.

Paso 3: Confirmar y desplegar el nodo

Si utiliza un espacio de trabajo en modo estándar y desea programar esta tarea, confirme y despliegue el nodo en el entorno de producción. Para obtener más información, consulte Deploy tasks.

Paso 4: Ejecutar el nodo y consultar el resultado

Después de configurar el nodo, ejecútelo. Cuando finalice la tarea, consulte los datos sincronizados en la tabla de MaxCompute. Los datos sincronizados incluyen los siguientes campos y valores: 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) y pt (20230202). Algunos campos numéricos se almacenan como texto. Los valores de los campos complejos son los siguientes:

  • El contenido del campo col_doc es el siguiente.

    {
      "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"
    }
  • El contenido del campo col_combine es el siguiente.

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

Para obtener información sobre problemas relacionados con la salida de datos de tipo Decimal, consulte Appendix 2: Handle the output of the Decimal type in documents.

Apéndice 1: Conversión de formatos de datos

Convertir datos de arreglo a formato JSON: col_array_to_json

Datos de origen de MongoDB

Configuración de asignación de campos

Salida en MaxCompute

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

En la configuración de asignación de campos, si type es string, la tarea de sincronización serializa los datos originales al formato JSON durante la ejecución para generar la salida.

[a, b]

Convertir un arreglo en una cadena concatenada: col_array_to_join

Datos de origen de MongoDB

Configuración de asignación de campos

Salida en MaxCompute

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

Al configurar la asignación de campos, el parámetro splitter es obligatorio si type es array. Durante la ejecución, la tarea de sincronización une el contenido del arreglo de origen mediante el separador y genera como salida la cadena concatenada.

a,b

Sincronizar campos de documentos anidados

Datos de origen de MongoDB

Configuración de asignación de campos

Salida en MaxCompute

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

name especifica la ruta (path) del campo que se sincronizará dentro del document. Al ejecutarse, la tarea de sincronización lee el document según dicha ruta y genera los datos de salida.

mock string value

Serializar un documento como cadena JSON

Datos de origen de MongoDB

Configuración de asignación de campos

Salida en MaxCompute

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

Al configurar la asignación de campos, si type es string, la tarea de sincronización serializa todo el campo col_doc como una cadena JSON durante la ejecución y la envía como salida.

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

Serializar campos no asignados como JSON

Datos de origen de MongoDB

Configuración de asignación de campos

Salida en 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"}

Este documento tiene cuatro campos. col_1 y col_2 se asignan de forma explícita. Durante la sincronización, los campos restantes sin asignar (col_3 y col_4) se serializan en un objeto JSON y se generan como salida.

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

Apéndice 2: Salida del tipo Decimal

Cuando un documento se serializa a JSON, los datos Decimal128 se generan de forma predeterminada con el siguiente formato:

{
    "key_decimal":
    {
        "finite": true,
        "high": 3471149412795809792,
        "infinite": false,
        "low": 99999994999999999,
        "naN": false,
        "negative": false
    }
}

Para generar los datos como un tipo numérico, siga estos pasos:

  1. Al configurar la tarea de sincronización por lotes, cambie al modo de script.

  2. Modifique la configuración de la tarea Reader: en la sección de parámetros, agregue el parámetro decimal128OutputType y establezca su valor en bigDecimal.

    "parameter": {
        "collectionName": "di_mongodb_conf_test",
        "decimal128OutputType":"bigDecimal"
    },
    "name": "Reader",
    "category": "reader"
  3. Ejecute de nuevo la tarea de sincronización por lotes y consulte el resultado.

    {
        "key_decimal": "9999999.4999999999"
    }