DataWorks, MongoDB ile çift yönlü veri eşitleme sağlar. Bu konuda, DataWorks'ün MongoDB için sunduğu veri eşitleme özellikleri açıklanmaktadır.
Desteklenen sürümler
Yalnızca MongoDB 4.x, 5.x, 6.x, 7.x ve 8,0 sürümleri desteklenir.
Kullanım notları
MongoDB veritabanına, o veritabanı için oluşturulmuş bir hesap kullanarak bağlanın. ApsaraDB for MongoDB veri kaynağı kullanıyorsanız varsayılan olarak bir kök hesap oluşturulur. Güvenlik nedeniyle MongoDB veri kaynağı eklerken kök hesabı kullanmamanızı öneririz.
MongoDB parçalı küme (sharded cluster) kullanıyorsanız veri kaynağı için bir mongos düğümünün adresini yapılandırmanız gerekir. Bir mongod/shard düğümünün adresini yapılandırmayın. Aksi takdirde eşitleme görevi tüm veri kümesi yerine yalnızca belirtilen parçadan veri sorgulayabilir. mongos ve mongod hakkında daha fazla bilgi için mongos ve mongod belgelerine bakın.
-
Eşzamanlılık 1'den büyükse eşitleme görevi için yapılandırılan koleksiyondaki tüm
_idalanları aynı veri türüne sahip olmalıdır. Örneğin tüm_idalanları string veya ObjectId türünde olmalıdır. Aksi takdirde bazı veriler eşitlenmeyebilir.NotEşzamanlılık 1'den büyük olduğunda görev
_idalanına göre bölünür. Bu nedenle bu senaryoda_idalanı için karışık veri türleri desteklenmez._idalanı birden çok veri türü içeriyorsa veri eşitleme için eşzamanlılığı 1 olarak ayarlayın. Bunu yapmak için splitFactor parametresini yapılandırmayın veya splitFactor parametresini 1 olarak ayarlayın.
Veri Entegrasyonu dizi türünü desteklemez. Ancak MongoDB dizi türünü destekler ve güçlü bir dizinleme özelliği sunar. Dizeleri MongoDB dizilerine dönüştürmek için belirli parametreleri yapılandırabilirsiniz. Dönüşümden sonra verileri MongoDB'ye paralel olarak yazabilirsiniz.
Kendi yönettiğiniz MongoDB veritabanları genel ağ erişimini desteklemez. Bunlara yalnızca Alibaba Cloud iç ağı üzerinden erişilebilir.
Docker kullanılarak dağıtılan MongoDB kümeleri desteklenmez.
Belirli sütunlardan veri okumak için query parametresini kullanamazsınız.
Toplu eşitleme görevinde Veri Entegrasyonu alan yapısını MongoDB'den alamazsa varsayılan olarak altı alan için alan eşlemeleri oluşturur. Alan adları
col1,col2,col3,col4,col5vecol6şeklindedir.-
Görev yürütme sırasında görevi parçalamak için varsayılan olarak
splitVectorkomutu kullanılır. Bazı MongoDB sürümlerisplitVectorkomutunu desteklemez; bu durumno such cmd splitVectorhatasına neden olabilir. Bu hatayı önlemek için görev yapılandırmasındaki
simgesine tıklayın kod düzenleyicisine geçin ve splitVectorkullanımını önlemek için MongoDB parametre yapılandırmasına aşağıdaki parametreyi ekleyin."useSplitVector" : false
Desteklenen alan türleri
MongoDB Reader tarafından desteklenen MongoDB veri türleri
Veri Entegrasyonu çoğu MongoDB veri türünü destekler ancak hepsini desteklemez. Veri türlerinizin desteklendiğinden emin olun.
Veri Entegrasyonu desteklenen veri türlerini okurken aşağıdaki işlemleri gerçekleştirir:
-
İlkel veri türleri için Veri Entegrasyonu column parametresinde yapılandırılan alan adına göre ilgili yoldan verileri otomatik olarak okur. Daha fazla bilgi için bkz. Ek: MongoDB için örnek betik ve parametre açıklaması. Veri Entegrasyonu ayrıca veri türünü otomatik olarak dönüştürür. Sütun için type özelliğini belirtmeniz gerekmez.
Tür
Toplu okuma (MongoDB Reader)
Açıklama
ObjectId
Desteklenir
Nesne kimliği türü.
Double
Desteklenir
64 bit kayan nokta sayısı türü.
32-bit tamsayı
Desteklenir
32 bit tamsayı.
64-bit tamsayı
Desteklenir
64 bit tamsayı.
Decimal128
Desteklenir
Decimal128 türü.
NotBir alan iç içe geçmiş tür veya birleştirme türü olarak yapılandırılmışsa JSON serileştirme sırasında nesne olarak işlenir. Verileri ondalık sayı olarak çıkarmak için
decimal128OutputTypeparametresini eklemeniz vebigDecimalolarak ayarlamanız gerekir.String
Desteklenir
Dize türü.
Boolean
Desteklenir
Boole türü.
Timestamp
Desteklenir
Zaman damgası türü.
NotBsonTimestamp zaman damgalarını saklar. Saat dilimlerinin etkisini dikkate almanız gerekmez. Daha fazla bilgi için bkz. MongoDB'de saat dilimi sorunları.
Date
Desteklenir
Tarih türü.
-
Bazı karmaşık veri türleri için özel işlem gerçekleştirmek üzere sütunun type özelliğini yapılandırabilirsiniz.
Tür
Toplu okuma (MongoDB Reader)
Açıklama
Document
Desteklenir
Gömülü belge türü.
-
Type özelliği yapılandırılmazsa Belge doğrudan JSON serileştirme kullanılarak dönüştürülür.
-
Type özelliği
documentolarak ayarlanırsa alan iç içe geçmiş bir türdür. MongoDB Reader Belge özelliklerini yola göre okur. Ayrıntılı bir örnek için aşağıdaki Örnek 2: Çok düzeyli iç içe geçmiş Belgelerin özyinelemeli olarak ayrıştırılması bölümüne bakın.
Array
Desteklenir
Dizi türü.
-
Type
array.jsonveyaarraysolarak ayarlanırsa veriler doğrudan JSON serileştirme kullanılarak işlenir. -
Type
arrayveyadocument.arrayolarak ayarlanırsa öğeler bir dize olarak birleştirilir. Sütunun splitter özelliğinde belirtilen ayırıcı varsayılan olarak virgüldür (,).
ÖnemliVeri Entegrasyonu dizi türünü desteklemez. Ancak MongoDB dizi türünü destekler ve güçlü bir dizinleme özelliği sunar. Dizeleri MongoDB dizilerine dönüştürmek için belirli parametreleri yapılandırabilirsiniz. Dönüşümden sonra verileri MongoDB'ye paralel olarak yazabilirsiniz.
-
Özel Veri Entegrasyonu veri türü: combine
|
|
|
|
|
|
|
Veri Entegrasyonunda özel bir veri türü. Type |
MongoDB Reader veri türü eşlemeleri
Aşağıdaki tabloda MongoDB Reader için MongoDB veri türleri ile Veri Entegrasyonu veri türleri arasındaki eşlemeler listelenmektedir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MongoDB Writer veri türü eşlemeleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnek 1: Combine türünün kullanılması
MongoDB Reader eklentisinin combine veri türü bir MongoDB belgesindeki birden çok alanı tek bir JSON dizesinde birleştirmenize olanak tanır. Örneğin üç MongoDB belgesinden alanları MaxCompute'e aktarmak istediğinizi varsayalım. Aşağıdaki örnekte alanlar anahtar-değer çiftleri yerine anahtarlarla temsil edilir. a ve b alanları üç belgede de ortaktır ve x_n değişken bir alandır.
doc1: a b x_1 x_2doc2: a b x_2 x_3 x_4doc3: a b x_5
Yapılandırma dosyasında birebir eşleme gerektiren alanları açıkça belirtmeniz gerekir. Birleştirmek istediğiniz alanlar için belgedeki mevcut herhangi bir alan adından farklı yeni bir ad atayın ve türü COMBINE olarak ayarlayın. Aşağıdaki kod bir örnek sunar.
"column": [
{
"name": "a",
"type": "string",
},
{
"name": "b",
"type": "string",
},
{
"name": "doc",
"type": "combine",
}
]
Aşağıdaki tabloda MaxCompute'teki son çıktı gösterilmektedir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MongoDB belgesindeki birden çok alanı combine türünü kullanarak birleştirdikten sonra çıktı MaxCompute'e eşlendiğinde ortak alanlar otomatik olarak silinir. Yalnızca belgenin benzersiz alanları korunur.
Örneğin a ve b tüm belgelerde ortak alanlardır. doc1: a b x_1 x_2 belgesindeki alanlar combine türü kullanılarak birleştirildikten sonra çıktı {a,b,x_1,x_2} olur. Bu sonuç MaxCompute'e eşlendiğinde a ve b gibi ortak alanlar silinir. Sonuç {x_1,x_2} olarak çıkar.
Örnek 2: Çok düzeyli iç içe geçmiş Belgelerin özyinelemeli olarak ayrıştırılması
MongoDB'deki bir belgede birden çok iç içe geçme düzeyi varsa bunu özyinelemeli olarak ayrıştırmak için belge türünü yapılandırabilirsiniz. Aşağıdaki kod bir örnek sunar.
-
MongoDB'deki kaynak veriler:
{ "name": "name1", "a": { "b": { "c": "this is value" } } } -
MongoDB sütun yapılandırması:
{"name":"_id","type":"string"} {"name":"name","type":"string"} {"name":"a.b.c","type":"document"}Yapılandırma tamamlandıktan sonra kaynak ve hedef alanlar şu şekilde eşlenir:
_idalanıidilenamealanınameile vea.b.calanıcile eşlenir.
Yukarıdaki yapılandırmayla iç içe geçmiş kaynak alanı a.b.c'nin değeri hedef alan c'ye yazılır. Eşitleme görevi çalıştırıldıktan sonra hedefe yazılan veri this is value olur.
Veri kaynağı ekleme
DataWorks'te bir eşitleme görevi geliştirmeden önce Veri kaynağı yapılandırması bölümündeki talimatları izleyerek gerekli veri kaynağını DataWorks'e eklemeniz gerekir. Veri kaynağı eklerken parametrelerin anlamlarını anlamak için DataWorks konsolundaki parametre açıklamalarını görüntüleyebilirsiniz.
Veri eşitleme görevi geliştirme
Eşitleme görevini yapılandırmaya ilişkin giriş noktası ve yordam hakkında bilgi için aşağıdaki yapılandırma kılavuzlarına bakın.
Tek bir tablo için toplu eşitleme görevi yapılandırma
Yordam hakkında daha fazla bilgi için bkz. Kodsuz kullanıcı arayüzünde görev yapılandırma ve Kod düzenleyicide görev yapılandırma.
Kod düzenleyici için tüm parametreler ve örnek bir betik hakkında daha fazla bilgi için bkz. Ek: MongoDB için örnek betik ve parametre açıklaması.
Tek bir tablo için gerçek zamanlı eşitleme görevi yapılandırma
Bkz. Tek bir tablo için gerçek zamanlı eşitleme görevi yapılandırma.
Tüm veritabanı için eşitleme görevi yapılandırma
Tüm veritabanı için toplu eşitleme tam ve artımlı gerçek zamanlı eşitleme veya parçalı veritabanlarından gerçek zamanlı eşitleme görevleri yapılandırabilirsiniz. Daha fazla bilgi için bkz. Tüm veritabanı için toplu eşitleme görevi ve Tüm veritabanı için gerçek zamanlı eşitleme görevi yapılandırma.
En iyi uygulamalar
SSS
Ek: MongoDB için örnek betik ve parametre açıklaması
Kod düzenleyici kullanarak toplu eşitleme görevi yapılandırma
Toplu eşitleme görevini kod düzenleyici kullanarak yapılandırmak istiyorsanız ilgili parametreleri betikte birleşik betik biçimi gereksinimlerine göre yapılandırmanız gerekir. Daha fazla bilgi için bkz. Betik modu yapılandırması. Aşağıdaki bilgiler kod düzenleyici kullanarak toplu eşitleme görevi yapılandırırken veri kaynakları için yapılandırmanız gereken parametreleri açıklar.
Reader betik örneği
Aşağıdaki betik verileri MongoDB'den yerel bir ortama çıkarmak üzere yapılandırılmış bir iş örneğidir. Parametreler hakkında daha fazla bilgi için aşağıdaki parametre açıklamalarına bakın.
Kodu çalıştırmadan önce yorumları silin.
Bir diziden belirli öğeleri çıkaramazsınız.
{
"type":"job",
"version":"2.0",// Version number.
"steps":[
{
"category": "reader",
"name": "Reader",
"parameter": {
"datasource": "datasourceName", // Data source name.
"collectionName": "tag_data", // Collection name.
"query": "", // Data filtering query.
"column": [
{
"name": "unique_id", // Field name.
"type": "string" // Field type.
},
{
"name": "sid",
"type": "string"
},
{
"name": "user_id",
"type": "string"
},
{
"name": "auction_id",
"type": "string"
},
{
"name": "content_type",
"type": "string"
},
{
"name": "pool_type",
"type": "string"
},
{
"name": "frontcat_id",
"type": "array",
"splitter": ""
},
{
"name": "categoryid",
"type": "array",
"splitter": ""
},
{
"name": "gmt_create",
"type": "string"
},
{
"name": "taglist",
"type": "array",
"splitter": " "
},
{
"name": "property",
"type": "string"
},
{
"name": "scorea",
"type": "int"
},
{
"name": "scoreb",
"type": "int"
},
{
"name": "scorec",
"type": "int"
},
{
"name": "a.b",
"type": "document.int"
},
{
"name": "a.b.c",
"type": "document.array",
"splitter": " "
}
]
},
"stepType": "mongodb"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"common": {
"column": {
"timeZone": "GMT+0" // Time zone.
}
},
"errorLimit":{
"record":"0"// Number of error records.
},
"speed":{
"throttle":true,// Specifies whether to enable throttling. If you set this parameter to false, throttling is disabled and the mbps parameter does not take effect. If you set this parameter to true, throttling is enabled.
"concurrent":1, // Number of concurrent jobs.
"mbps":"12"// Throttling rate. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
|
Parametre |
Açıklama |
|
datasource |
Veri kaynağının adı. Kod düzenleyicide bu parametrenin değeri eklenen veri kaynağının adıyla aynı olmalıdır. |
|
collectionName |
MongoDB koleksiyonunun adı. |
|
hint |
hint parametresi sorgu iyileştiricisini bir sorgu için belirli bir dizin kullanmaya zorlar; bu da performansı artırabilir. Daha fazla bilgi için bkz. hint parametresi. Örnek:
|
|
column |
MongoDB'den okunacak belge alanlarını belirten bir dizi.
|
|
batchSize |
Bir partide alınacak kayıt sayısı. Bu parametre isteğe bağlıdır. Varsayılan değer: |
|
cursorTimeoutInMs |
İmleç zaman aşımı süresi. Bu parametre isteğe bağlıdır. Varsayılan değer: Not
|
|
query |
Dönen MongoDB verilerini filtrelemek için bu parametreyi kullanın. Yalnızca belirtilen saat biçimleri desteklenir. UNIX zaman damgası biçimi doğrudan desteklenmez. Not
Aşağıdaki kod query parametresi için yaygın örnekler sunar:
Not
MongoDB'nin sorgu sözdizimi hakkında daha fazla bilgi için bkz. resmi MongoDB belgeleri. |
|
splitFactor |
Ciddi veri eğriliği varsa eşzamanlılığı artırmadan daha ince taneli parçalama elde etmek için splitFactor değerini artırmayı düşünün. |
Writer betik örneği
Aşağıdaki betik verileri MongoDB'ye yazmak üzere yapılandırılmış bir veri eşitleme işi örneğidir. Parametreler hakkında daha fazla bilgi için aşağıdaki parametre açıklamalarına bakın.
{
"type": "job",
"version": "2.0",// Version number.
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "mongodb",// Plugin name.
"parameter": {
"datasource": "",// Data source name.
"column": [
{
"name": "_id",// Column name.
"type": "ObjectId"// Data type. If replaceKey is _id, you must set type to ObjectId. If you set type to string, the replacement fails.
},
{
"name": "age",
"type": "int"
},
{
"name": "id",
"type": "long"
},
{
"name": "wealth",
"type": "double"
},
{
"name": "hobby",
"type": "array",
"splitter": " "
},
{
"name": "valid",
"type": "boolean"
},
{
"name": "date_of_join",
"format": "yyyy-MM-dd HH:mm:ss",
"type": "date"
}
],
"writeMode": {// Write mode.
"isReplace": "true",
"replaceKey": "_id"
},
"collectionName": "datax_test"// Collection name.
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {// Number of error records.
"record": "0"
},
"speed": {
"throttle": true,// Specifies whether to enable throttling. If you set this parameter to false, throttling is disabled and the mbps parameter does not take effect. If you set this parameter to true, throttling is enabled.
"concurrent": 1,// Number of concurrent jobs.
"mbps": "1"// Throttling rate. 1 mbps = 1 MB/s.
},
"jvmOption": "-Xms1024m -Xmx1024m"
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Writer betik parametreleri
|
Parametre |
Açıklama |
Gerekli |
Varsayılan değer |
|
datasource |
Veri kaynağının adı. Kod düzenleyicide bu parametrenin değeri eklenen veri kaynağının adıyla aynı olmalıdır. |
Evet |
Yok |
|
collectionName |
MongoDB koleksiyonunun adı. |
Evet |
Yok |
|
column |
MongoDB'ye yazılacak belge alanlarını belirten bir dizi.
|
Evet |
Yok |
|
writeMode |
İletim sırasında verilerin üzerine yazılıp yazılmayacağını belirtir. isReplace ve replaceKey parametrelerini içerir:
Not
isReplace true olarak ayarlanırsa ve
Bunun nedeni yazılacak verilerin |
Hayır |
Yok |
|
preSql |
MongoDB'ye veri yazmadan önce geçmişi temizleme gibi önceden yürütülecek bir işlem. preSql boşsa önceden yapılandırılmış bir işlem yoktur. preSql yapılandırırken değerinin JSON sözdizimine uygun olduğundan emin olun. |
Hayır |
Yok |
Bir Veri Entegrasyonu işi çalıştırıldığında yapılandırılan preSql önce yürütülür. Gerçek veri yazma aşaması yalnızca preSql yürütmesi tamamlandıktan sonra başlar. preSql parametresi yazılan verilerin içeriğini etkilemez. preSql parametresi Veri Entegrasyonu için idempotent yürütme sağlar. Örneğin preSql değeriniz her görev çalıştırmasından önce iş kurallarınıza göre geçmiş verileri temizlemek için kullanılabilir. Bu durumda bir görev başarısız olursa Veri Entegrasyonu işini yeniden çalıştırmanız yeterlidir.
preSql için biçim gereksinimleri aşağıdaki gibidir:
-
Önceden işlem türünü belirtmek için type alanını yapılandırmanız gerekir. Desteklenen değerler drop ve remove şeklindedir. Örnek:
"preSql":{"type":"remove"}.drop: Koleksiyonu ve içindeki verileri siler. Silinecek koleksiyon collectionName parametresiyle belirtilir.
remove: Koşula göre verileri siler.
-
json: Veri silme koşullarını belirtmek için bir JSON nesnesi kullanabilirsiniz. Örnek:
"preSql":{"type":"remove", "json":"{'operationTime':{'$gte':ISODate('${last_day}T00:00:00.424+0800')}}"}. Bu örnekte${last_day}$[yyyy-mm-dd]biçiminde bir DataWorks zamanlama parametresidir. Gerektiğinde diğer MongoDB destekli koşullu işleçleri ($gt, $lt, $gte ve $lte gibi), mantıksal işleçleri (and ve or gibi) veya işlevleri (max, min, sum, avg ve ISODate gibi) de kullanabilirsiniz.Veri Entegrasyonu veri silme işlemini aşağıdaki standart MongoDB API'sini kullanarak yürütür:
query=(BasicDBObject) com.mongodb.util.JSON.parse(json); col.deleteMany(query);NotKoşullara göre veri silmek için JSON yapılandırmasını kullanmanızı öneririz.
-
item: Veri filtreleme için sütun adını (name), koşulu (condition) ve sütun değerini (value) bir item içinde yapılandırabilirsiniz. Örnek:
"preSql":{"type":"remove","item":[{"name":"pv","value":"100","condition":"$gt"},{"name":"pid","value":"10"}]}.Veri Entegrasyonu yapılandırılan item koşullarına göre bir sorgu koşulu oluşturur ve ardından silme işlemini standart bir MongoDB API'si kullanarak yürütür. Örneğin:
col.deleteMany(query);.
preSql tanınmazsa önceden silme işlemi gerçekleştirilmez.