Todos os produtos
Search
Central de documentação

DataWorks:Leitura de dados do MongoDB com sincronização em lote

Última atualização: Jun 27, 2026

O DataWorks Data Integration oferece o plugin MongoDB Reader para ler dados do MongoDB e sincronizá-los com outras fontes de dados. Este tópico demonstra como usar o Data Integration para sincronizar dados em lote do MongoDB para o MaxCompute.

Contexto

Neste tutorial, a source é o MongoDB e o destino é o MaxCompute. Antes de começar, prepare os dados no MongoDB e crie uma tabela de destino no MaxCompute.

Pré-requisitos

Antes de iniciar, verifique se você atende aos seguintes requisitos:

  • Você ativou o DataWorks e criou uma fonte de dados do MaxCompute.

  • Este tutorial utiliza um grupo de recursos exclusivo para Data Integration na execução da tarefa em lote. Adquira e configure um grupo de recursos exclusivo para Data Integration. Para mais informações, consulte Usar um grupo de recursos exclusivo para Data Integration.

    Nota

    Também é possível utilizar um grupo de recursos serverless. Para mais informações, consulte Usar um grupo de recursos serverless.

Preparação dos dados e tabelas de exemplo

Este tutorial requer uma coleção do MongoDB e uma tabela do MaxCompute para a sincronização em lote.

  1. Prepare uma coleção do MongoDB.

    Este tutorial usa o ApsaraDB for MongoDB como exemplo. O código a seguir mostra como preparar a coleção do MongoDB.

    1. Crie uma coleção chamada di_mongodb_conf_test.

      db.createCollection('di_mongodb_conf_test')
    2. Insira os dados de exemplo deste tutorial na coleção.

      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 os dados inseridos no MongoDB.

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

      O resultado da consulta exibe um documento de teste na coleção, com _id igual a 63dca714b8548a78e1dc3238. Esse documento contém diversos tipos de dados: string (col_string), inteiro (col_int32/col_int64), ponto flutuante (col_double/col_decimal), booleano (col_boolean), data/hora (col_date/col_timestamp) e array (col_array_to_join/col_array_to_json). Ele também inclui um documento aninhado, col_doc, e dois campos extras, col_extra_1 e col_extra_2.

  2. Prepare uma tabela do MaxCompute.

    1. Crie uma tabela particionada chamada di_mongodb_conf_test com pt como campo de partição.

      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. Adicione uma partição com o valor 20230202.

      alter table di_mongodb_conf_test add if not exists partition (pt='20230202');
    3. Verifique se a tabela particionada foi criada corretamente.

      SELECT*FROM di_mongodb_conf_test
      WHEREpt='20230202';

Configuração da tarefa de sincronização em lote

Etapa 1: Adicionar uma fonte de dados do MongoDB

Adicione uma fonte de dados do MongoDB e garanta a conectividade de rede entre essa fonte e o grupo de recursos exclusivo para Data Integration. Para mais informações, consulte Adicionar uma fonte de dados do MongoDB.

Etapa 2: Criar e configurar um nó de sincronização em lote

No DataWorks DataStudio, crie um nó de sincronização em lote e configure sua source e seu destino. Esta seção destaca os parâmetros principais; para os demais, utilize os valores padrão. Para instruções detalhadas, consulte Configurar um nó de sincronização em lote usando a Codeless UI.

  1. Configure a conexão de rede.

    Selecione as fontes de dados do MongoDB e do MaxCompute, o grupo de recursos exclusivo correspondente para Data Integration e, em seguida, teste a conectividade.

  2. Configure a tarefa: selecione as fontes de dados.

    Para source e destino, selecione a coleção do MongoDB e a tabela particionada do MaxCompute.

  3. Configure a tarefa: mapeie os campos.

    Quando a fonte de dados é o MongoDB, o Peer mapping é usado por padrão. Você também pode clicar em no ícone icon para editar manualmente os campos da tabela de origem. O exemplo a seguir ilustra a edição 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"}

    Após editar os campos, a interface exibe o mapeamento entre os campos de origem e de destino.

Etapa 3: Confirmar e implantar o nó

Se você utiliza um workspace no modo padrão e deseja agendar esta tarefa, confirme e implante o nó no ambiente de produção. Para mais informações, consulte Implantar tarefas.

Etapa 4: Executar o nó e visualizar o resultado

Após configurar o nó, execute-o. Quando a tarefa for concluída, visualize os dados sincronizados na tabela do MaxCompute. Os dados sincronizados incluem os seguintes campos e 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) e pt (20230202). Alguns campos numéricos são armazenados como texto. Os valores dos campos complexos são os seguintes:

  • O conteúdo do campo col_doc é apresentado abaixo.

    {
      "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"
    }
  • O conteúdo do campo col_combine é apresentado abaixo.

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

Para informações sobre problemas relacionados à saída de dados do tipo Decimal, consulte Apêndice 2: Tratar a saída do tipo Decimal em documentos.

Apêndice 1: Conversão de formato de dados

Converter dados de array para formato JSON: col_array_to_json

Dados de source do MongoDB

Configuração de mapeamento de campos

Saída para o MaxCompute

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

Na configuração de mapeamento de campos, se type for string, a tarefa de sincronização serializa os dados originais no formato JSON para saída durante a execução.

[a, b]

Converter um array em uma string concatenada: col_array_to_join

Dados de source do MongoDB

Configuração de mapeamento de campos

Saída para o MaxCompute

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

Ao configurar o mapeamento de campos, o parâmetro splitter é obrigatório se o type for array. Durante a execução da tarefa de sincronização, o conteúdo do array de dados de origem é unido usando o separador, resultando na string concatenada final.

a,b

Sincronizar campos de documentos aninhados

Dados de source do MongoDB

Configuração de mapeamento de campos

Saída para o MaxCompute

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

name especifica o path do campo a ser sincronizado no document. Ao executar a tarefa de sincronização, o sistema lê o document com base no path e gera a saída dos dados.

mock string value

Serializar um documento como string JSON

Dados de source do MongoDB

Configuração de mapeamento de campos

Saída para o MaxCompute

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

Ao configurar o mapeamento de campos, se type for string, a tarefa de sincronização serializa todo o col_doc em uma string JSON e a gera como saída durante a execução.

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

Serializar campos não mapeados como JSON

Dados de source do MongoDB

Configuração de mapeamento de campos

Saída para o 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 possui quatro campos. col_1 e col_2 são mapeados explicitamente. Durante a sincronização, os campos restantes não mapeados (col_3 e col_4) são serializados em um objeto JSON e gerados como saída.

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

Apêndice 2: Saída do tipo Decimal

Quando um documento é serializado para o formato JSON, os dados Decimal128 são, por padrão, gerados da seguinte forma:

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

Para gerar os dados como um tipo numérico, siga estas etapas:

  1. Ao configurar a tarefa de sincronização em lote, alterne para o modo script.

  2. Modifique a configuração da tarefa Reader: na seção de parâmetros, adicione o parâmetro decimal128OutputType e defina seu valor como bigDecimal.

    "parameter": {
        "collectionName": "di_mongodb_conf_test",
        "decimal128OutputType":"bigDecimal"
    },
    "name": "Reader",
    "category": "reader"
  3. Execute novamente a tarefa de sincronização em lote e visualize o resultado.

    {
        "key_decimal": "9999999.4999999999"
    }