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.
NotBunun 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.
-
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.
-
di_mongodb_conf_testadlı bir koleksiyon oluşturun.db.createCollection('di_mongodb_conf_test') -
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', }) -
MongoDB'ye eklenen verileri sorgulayın.
db.getCollection("di_mongodb_conf_test").find({})Sorgu sonucu, koleksiyonda
_iddeğeri63dca714b8548a78e1dc3238olan 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 olancol_docve iki ek alan olancol_extra_1ilecol_extra_2alanlarını da barındırır.
-
-
Bir MaxCompute tablosu hazırlayın.
-
Bölüm alanı olarak
ptkullanılan,di_mongodb_conf_testadı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 ; -
20230202değerine sahip bir bölüm ekleyin.alter table di_mongodb_conf_test add if not exists partition (pt='20230202'); -
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.
-
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.
-
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.
-
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
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_docalanı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_combinealanının içeriği aşağıdaki gibidir.{ "col_extra_1": "this is extra 1", "col_extra_2": "this is extra 2" }
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ı |
|
Alan eşleme yapılandırmasında |
|
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ı |
|
Alan eşlemesini yapılandırırken |
|
İç içe geçmiş belge alanlarını senkronize etme
|
Kaynak MongoDB verileri |
Alan eşleme yapılandırması |
MaxCompute'a çıktı |
|
|
|
Bir belgeyi JSON dizesi olarak seri hale getirme
|
Kaynak MongoDB verileri |
Alan eşleme yapılandırması |
MaxCompute'a çıktı |
|
Alan eşlemesini yapılandırırken |
|
Eşlenmemiş alanları JSON olarak seri hale getirme
|
Kaynak MongoDB verileri |
Alan eşleme yapılandırması |
MaxCompute'a çıktı |
|
Bu belgede dört alan bulunur. |
|
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:
Toplu senkronizasyon görevini yapılandırırken betik moduna geçin.
-
Reader görev yapılandırmasını değiştirin: parametre bölümünde
decimal128OutputTypeparametresini ekleyin ve değerinibigDecimalolarak ayarlayın."parameter": { "collectionName": "di_mongodb_conf_test", "decimal128OutputType":"bigDecimal" }, "name": "Reader", "category": "reader" -
Toplu senkronizasyon görevini yeniden çalıştırın ve sonucu görüntüleyin.
{ "key_decimal": "9999999.4999999999" }