Tüm Ürünler
Search
Belge Merkezi

DataWorks:Toplu senkronizasyon ile MongoDB'den veri okuma

Son Güncelleme:Oct 05, 2026

DataWorks Data Integration, MongoDB'den veri okumak ve bu verileri diğer veri kaynaklarına senkronize etmek için MongoDB Reader eklentisini sağlar. Bu kılavuzda, verileri MongoDB'den MaxCompute'a toplu olarak senkronize etme adımlarını inceleyeceksiniz.

Arka Plan

Kaynak veri kaynağı MongoDB, hedef ise MaxCompute'tır. Başlamadan önce MongoDB verilerini hazırlayın ve MaxCompute'ta bir hedef tablo oluşturun.

Ön Koşullar

Aşağıdaki gereksinimlerin karşılandığından emin olun:

  • DataWorks'ü etkinleştirdiniz ve bir MaxCompute veri kaynağı oluşturdunuz.

  • Bu kılavuzda toplu iş görevini çalıştırmak için Data Integration özel kaynak grubu kullanılır. Bir Data Integration özel kaynak grubu satın almanız ve yapılandırmanız gerekir. Daha fazla bilgi için bkz. Data Integration için özel kaynak grubu kullanma.

    Not

    Bunun yerine sunucusuz bir kaynak grubu da kullanabilirsiniz. Daha fazla bilgi için bkz. Sunucusuz kaynak grubu kullanma.

Örnek verileri ve tabloları hazırlama

Toplu senkronizasyon için bir MongoDB koleksiyonu ve bir MaxCompute tablosu hazırlayın.

  1. Bir MongoDB koleksiyonu hazırlayın.

    Bu kılavuzda örnek olarak ApsaraDB for MongoDB kullanılmıştır. Aşağıdaki kod, MongoDB koleksiyonunun nasıl hazırlanacağını gösterir.

    1. di_mongodb_conf_test adlı bir koleksiyon oluşturun.

      db.createCollection('di_mongodb_conf_test')
    2. Bu kılavuz için örnek verileri koleksiyona ekleyin.

      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. MongoDB'ye eklenen verileri sorgulayın.

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

      Sorgu sonucu, koleksiyonda _id değeri 63dca714b8548a78e1dc3238 olan bir test belgesi olduğunu gösterir. Bu belge; dize (col_string), tamsayı (col_int32/col_int64), kayan nokta (col_double/col_decimal), Boolean (col_boolean), tarih/saat (col_date/col_timestamp) ve dizi (col_array_to_join/col_array_to_json) gibi çeşitli veri türlerini içerir. Ayrıca iç içe geçmiş bir belge olan col_doc ve iki ek alan olan col_extra_1 ile col_extra_2 alanlarını da barındırır.

  2. Bir MaxCompute tablosu hazırlayın.

    1. Bölüm alanı olarak pt kullanılan, di_mongodb_conf_test adında bölümlendirilmiş bir tablo oluşturun.

      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. 20230202 değerine sahip bir bölüm ekleyin.

      alter table di_mongodb_conf_test add if not exists partition (pt='20230202');
    3. Bölümlendirilmiş tablonun doğru oluşturulduğunu doğrulayın.

      SELECT*FROM di_mongodb_conf_test
      WHEREpt='20230202';

Toplu senkronizasyon görevini yapılandırma

Adım 1: MongoDB veri kaynağı ekleme

Bir MongoDB veri kaynağı ekleyin ve veri kaynağı ile Data Integration özel kaynak grubu arasında ağ bağlantısının sağlandığından emin olun. Daha fazla bilgi için bkz. MongoDB veri kaynağı ekleme.

Adım 2: Toplu senkronizasyon düğümü oluşturma ve yapılandırma

DataWorks DataStudio'da bir toplu senkronizasyon düğümü oluşturun ve kaynak ile hedef ayarlarını yapılandırın. Aşağıda yalnızca temel parametreler vurgulanmıştır; diğerleri için varsayılan değerleri kullanın. Ayrıntılı talimatlar için bkz. Kodsuz UI kullanarak toplu senkronizasyon düğümü yapılandırma.

  1. Ağ bağlantısını yapılandırın.

    MongoDB ve MaxCompute veri kaynaklarını, ilgili Data Integration özel kaynak grubunu seçin ve ardından bağlantıyı test edin.

  2. Görevi yapılandırın: Veri kaynaklarını seçin.

    Kaynak ve hedef için MongoDB koleksiyonunu ve bölümlendirilmiş MaxCompute tablosunu seçin.

  3. Görevi yapılandırın: Alanları eşleyin.

    Veri kaynağı MongoDB olduğunda, varsayılan olarak Map Fields in Same Row kullanılır. Kaynak tablo alanlarını manuel olarak düzenlemek için icon simgesine tıklayabilirsiniz. Aşağıda manuel düzenlemeye bir örnek verilmiştir.

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

    Alanları düzenledikten sonra UI, kaynak ve hedef alanları arasındaki eşlemeyi görüntüler.

Adım 3: Düğümü gönderme ve dağıtma

Standart modda bir çalışma alanı kullanıyorsanız ve bu görevi zamanlamak istiyorsanız düğümü üretim ortamına gönderin ve dağıtın. Daha fazla bilgi için bkz. Görevleri dağıtma.

Adım 4: Düğümü çalıştırma ve sonucu görüntüleme

Düğümü yapılandırdıktan sonra çalıştırın. Görev tamamlandığında, MaxCompute tablosundaki senkronize edilmiş verileri görüntüleyin. Senkronize edilen veriler aşağıdaki alanları ve değerleri içerir: 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) ve pt (20230202). Bazı sayısal alanlar metin olarak depolanır. Karmaşık alanların değerleri aşağıdaki gibidir:

  • col_doc alanının içeriği aşağıdaki gibidir.

    {
      "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"
    }
  • col_combine alanının içeriği aşağıdaki gibidir.

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

Decimal türü verilerin çıktısıyla ilgili sorunlar hakkında bilgi için bkz. Ek 2: Belgelerde Decimal türünün çıktısını işleme.

Ek 1: Veri biçimi dönüştürme

Dizi verilerini JSON biçimine dönüştürme: col_array_to_json

Kaynak MongoDB verileri

Alan eşleme yapılandırması

MaxCompute'a çıktı

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

Alan eşleme yapılandırmasında type değeri string ise senkronizasyon görevi, çalışma zamanında orijinal verileri JSON biçimine seri hale getirerek çıktı verir.

[a, b]

Bir diziyi birleştirilmiş dizeye dönüştürme: col_array_to_join

Kaynak MongoDB verileri

Alan eşleme yapılandırması

MaxCompute'a çıktı

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

Alan eşlemesini yapılandırırken type değeri array ise splitter parametresi gereklidir. Senkronizasyon görevi çalıştığında kaynak veri dizisinin içeriğini ayırıcı kullanarak birleştirir ve nihai çıktı birleştirilmiş dize olur.

a,b

İç içe geçmiş belge alanlarını senkronize etme

Kaynak MongoDB verileri

Alan eşleme yapılandırması

MaxCompute'a çıktı

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

name, document içindeki senkronize edilecek alanın path değerini belirtir. Senkronizasyon görevi çalıştığında path değerine göre document değerini okur ve veriyi çıktı olarak verir.

mock string value

Bir belgeyi JSON dizesi olarak seri hale getirme

Kaynak MongoDB verileri

Alan eşleme yapılandırması

MaxCompute'a çıktı

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

Alan eşlemesini yapılandırırken type değeri string ise senkronizasyon görevi, çalışma zamanında tüm col_doc değerini bir JSON dizesine seri hale getirerek çıktı verir.

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

Eşlenmemiş alanları JSON olarak seri hale getirme

Kaynak MongoDB verileri

Alan eşleme yapılandırması

MaxCompute'a çıktı

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

Bu belgede dört alan bulunur. col_1 ve col_2 açıkça eşlenmiştir. Senkronizasyon sırasında kalan eşlenmemiş alanlar (col_3 ve col_4) bir JSON nesnesine seri hale getirilerek çıktı verilir.

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

Ek 2: Decimal türü çıktısı

Bir belge JSON'a seri hale getirildiğinde Decimal128 verisi varsayılan olarak aşağıdaki biçimde çıktı verilir:

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

Verileri sayısal tür olarak çıktı almak için şu adımları izleyin:

  1. Toplu senkronizasyon görevini yapılandırırken betik moduna geçin.

  2. Reader görev yapılandırmasını değiştirin: parametre bölümünde decimal128OutputType parametresini ekleyin ve değerini bigDecimal olarak ayarlayın.

    "parameter": {
        "collectionName": "di_mongodb_conf_test",
        "decimal128OutputType":"bigDecimal"
    },
    "name": "Reader",
    "category": "reader"
  3. Toplu senkronizasyon görevini yeniden çalıştırın ve sonucu görüntüleyin.

    {
        "key_decimal": "9999999.4999999999"
    }