Elasticsearch veri kaynakları, DataWorks ile Elasticsearch arasında veri senkronizasyonu için çift yönlü okuma ve yazma kanalları sağlar.
Uygulanabilirlik
Ortak kaynak grupları Elasticsearch 5.x sürümünü desteklerken, Serverless kaynak grupları (önerilen) ve veri entegrasyonu için özel kaynak grupları Elasticsearch 5.x, 6.x, 7.x ve 8.x sürümlerini destekler.
Serverless kaynak grupları hakkında ayrıntılı bilgi için bkz. Serverless kaynak grubu kullanma.
Veri entegrasyonu için özel kaynak grupları hakkında ayrıntılı bilgi için bkz. Veri entegrasyonu için özel kaynak grubu kullanma.
Elasticsearch, Apache lisansı altında geliştirilen açık kaynaklı, kurumsal düzeyde bir arama motorudur. Lucene üzerine inşa edilmiş olup dağıtılmış arama ve veri analizi yetenekleri sunar. Aşağıdaki tabloda temel Elasticsearch kavramları ile bunların ilişkisel veritabanındaki karşılıkları gösterilmiştir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bir Elasticsearch örneği birden fazla dizin içerebilir. Her dizin birden fazla tür barındırır, her tür birden fazla belge içerir ve her belge de birden fazla alandan oluşur. Elasticsearch Writer eklentisi, verileri toplu olarak Elasticsearch'e yazmak için Elasticsearch REST API'sini kullanır.
Desteklenen sürümler
DataWorks, Alibaba Cloud Elasticsearch'in 5.x, 6.x, 7.x ve 8.x sürümlerini destekler ancak kendi kendine yönetilen Elasticsearch örneklerini desteklemez.
Sınırlamalar
Elasticsearch'ten çevrimdışı okuma ve bu sisteme yazma işlemleri için aşağıdaki sınırlamalar geçerlidir:
Elasticsearch Reader, veri senkronizasyonu için sunucudan parça bilgilerini alır. Veri tutarsızlığını önlemek amacıyla senkronizasyon sırasında tüm parçaların etkin olması gerekir.
Elasticsearch 6.x veya sonraki sürümler için serverless kaynak grubu (önerilen) veya Veri Entegrasyonu için özel kaynak grubu kullanabilirsiniz.
scaled_floatalanları senkronize edilemez.Alan adlarında
$refanahtar kelimesi bulunan dizinler senkronize edilemez.
Desteklenen alan türleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Çalışma şekli
Elasticsearch Reader şu şekilde çalışır:
Elasticsearch _searchscrollslice API'sini kullanır ve kaydırma dilimi özelliğini Data Integration'ın çok iş parçacıklı parçalama yapısıyla birleştirir.
Elasticsearch'teki eşleme yapılandırmasına göre veri türlerini dönüştürür.
Daha fazla bilgi için bkz. resmi Elasticsearch belgeleri.
Elasticsearch Reader, veri senkronizasyonu için sunucudan parça bilgilerini alır. Veri tutarsızlığını önlemek amacıyla veri senkronizasyonu sırasında sunucu tarafındaki tüm parçaların etkin kalmasını sağlamalısınız.
Temel yapılandırma
Üretim ortamında işi çalıştırmadan önce koddan açıklamaları kaldırın.
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // The error limit. The job stops if the error count exceeds this value.
},
"jvmOption":"",
"speed":{
"concurrent":3, // The number of concurrent threads.
"throttle":true,
"mbps":"12" // The maximum speed in MB/s.
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // The columns to read.
"id",
"name"
],
"endpoint":"", // The service endpoint.
"index":"", // The source index.
"password":"", // The password for authentication.
"scroll":"", // The scroll context duration.
"search":"", // The query body, same as the `query` object in an Elasticsearch `_search` request.
"type":"default",
"username":"" // The username for authentication.
},
"stepType":"elasticsearch"
},
{
"stepType": "elasticsearch",
"parameter": {
"column": [ // The columns to write.
{
"name": "id",
"type": "integer"
},
{
"name": "name",
"type": "text"
}
],
"index": "test", // The destination index.
"indexType": "", // The index type. Leave this empty for Elasticsearch v7.x or later.
"actionType": "index", // The write mode.
"cleanup": false, // Specifies whether to recreate the index before writing.
"datasource": "test", // The data source name.
"primaryKeyInfo": { // The primary key configuration.
"fieldDelimiterOrigin": ",",
"column": [
"id"
],
"type": "specific",
"fieldDelimiter": ","
},
"dynamic": false, // Specifies whether to enable dynamic mapping.
"batchSize": 1024 // The number of documents to write per batch.
},
"name": "Writer",
"category": "writer"
}
],
"type":"job",
"version":"2.0" // The version number.
}
Gelişmiş özellikler
-
Tam belge çekme
Bir Elasticsearch belgesinin tamamının içeriğini tek bir alana çekebilirsiniz. Yapılandırma ayrıntıları için bkz. Senaryo 1: Tam belge çekme.
-
Yarı yapılandırılmış verileri yapılandırılmış verilere dönüştürme
Kategori
Açıklama
Başvurular
Arka plan
Elasticsearch verileri genellikle dinamik alanlara ve derin iç içe geçmiş yapılara sahiptir. Bu özellik, yarı yapılandırılmış verileri aşağı akış hesaplama ve depolama için yapılandırılmış verilere dönüştürür.
—
Çalışma şekli
Çözüm, Elasticsearch'ten gelen JSON verilerini ayrıştırır, yol ifadelerini kullanarak iç içe geçmiş yapıları düzleştirir ve sonuçları yapılandırılmış tablolara eşler. Karmaşık belgeler gerekirse birden fazla tabloya bölünebilir.
—
Çözümler
İç içe geçmiş JSON verileri için belirli özelliklere erişmek üzere bir yol kullanın.
-
property
-
property.sub-property
-
property[0].sub-property
Senaryo 2: İç içe geçmiş veya nesne alanı özelliklerini senkronize etme
Bire çok ilişkiler için bir dizi özelliğini genişleterek öğelerini birden fazla satıra ayırın.
property[*].sub-property
Bir dizeden oluşan dizinin öğelerini birleştirip yinelemesiz hale getirerek tek bir özelliğe dönüştürün.
property[]
Senaryo 4: Bir dizi özelliğini yinelemesiz hale getirme ve birleştirme
Birden fazla özelliği tek bir özellikte birleştirin.
property1,property2
Bir listeden ilk boş olmayan özelliği seçin.
property1|property2
-
Veri kaynağı ekleme
DataWorks'te bir senkronizasyon 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 konsolunda parametre açıklamalarını görüntüleyebilirsiniz.
Veri senkronizasyon görevleri
Bir senkronizasyon görevini yapılandırmak için giriş noktası ve prosedür hakkında bilgi edinmek üzere aşağıdaki yapılandırma kılavuzlarına bakın.
Çevrimdışı senkronizasyon görevi (tek tablo)
Bkz. Kodsuz kullanıcı arayüzünde görev yapılandırma veya Kod düzenleyicide görev yapılandırma.
Tam parametre başvurusu ve bir komut dosyası demosu için bkz. Ek 1: Komut dosyası demosu ve parametre açıklamaları.
Gerçek zamanlı yazma görevi (tek tablo)
Bkz. DataStudio'da (Eski) gerçek zamanlı senkronizasyon görevi yapılandırma.
Tam veritabanı gerçek zamanlı senkronizasyon
Bkz. Gerçek zamanlı tam veritabanı senkronizasyon görevi yapılandırma.
Ek 1: Komut dosyası demosu ve parametreler
Kod düzenleyiciyi kullanarak toplu senkronizasyon görevi yapılandırma
Kod düzenleyiciyi kullanarak toplu senkronizasyon görevi yapılandırmak istiyorsanız, komut dosyasındaki ilgili parametreleri birleşik komut dosyası biçimi gereksinimlerine göre yapılandırmanız gerekir. Daha fazla bilgi için bkz. Komut dosyası modu yapılandırması. Aşağıdaki bilgiler, kod düzenleyiciyi kullanarak toplu senkronizasyon görevi yapılandırırken veri kaynakları için yapılandırmanız gereken parametreleri açıklar.
Reader komut dosyası demosu
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // The number of error records allowed.
},
"jvmOption":"",
"speed":{
"concurrent":3,
"throttle":false
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // The columns to read.
"id",
"name"
],
"endpoint":"http://es-cn-xxx.elasticsearch.aliyuncs.com:9200", // The endpoint.
"index":"aliyun_es_xx", // The index.
"password":"*******", // The password.
"multiThread":true,
"scroll":"5m", // The scroll context duration.
"pageSize":5000,
"connTimeOut":600000,
"readTimeOut":600000,
"retryCount":30,
"retrySleepTime":"10000",
"search":{
"range":{
"gmt_modified":{
"gte":0
}
}
}, // Query parameter. The content is identical to the query body of the Elasticsearch _search API.
"type":"doc",
"username":"aliyun_di" // The username.
},
"stepType":"elasticsearch"
},
{
"category":"writer",
"name":"Writer",
"parameter":{ },
"stepType":"stream"
}
],
"type":"job",
"version":"2.0" // The version number.
}
Reader komut dosyası parametreleri
|
Parametre |
Açıklama |
Gerekli |
Varsayılan |
|
datasource |
Mevcut bir DataWorks veri kaynağının adı. |
Evet |
Yok |
|
index |
Elasticsearch'teki dizin adı. |
Evet |
Yok |
|
type |
Elasticsearch'teki bir dizinin tür adı. |
Hayır |
Dizin adı |
|
search |
Elasticsearch için sorgu gövdesi. |
Evet |
Yok |
|
pageSize |
Sayfa başına okunacak kayıt sayısı. |
Hayır |
100 |
|
scroll |
Sayfalama için Elasticsearch kaydırma bağlamının ne kadar süreyle canlı tutulacağını belirtir.
|
Evet |
Yok |
|
strictMode |
Katı modun etkinleştirilip etkinleştirilmeyeceğini belirtir. |
Hayır |
true |
|
sort |
Sonuçların sıralanacağı alan. |
Hayır |
Yok |
|
retryCount |
Başarısız bir işlem için yeniden deneme sayısı. |
Hayır |
30 |
|
connTimeOut |
Milisaniye cinsinden istemci bağlantı zaman aşımı. |
Hayır |
600.000 |
|
readTimeOut |
Milisaniye cinsinden istemci okuma zaman aşımı. |
Hayır |
600.000 |
|
multiThread |
HTTP istekleri için birden fazla iş parçacığı kullanılıp kullanılmayacağını belirtir. |
Hayır |
true |
|
preemptiveAuth |
HTTP istekleri için önleyici kimlik doğrulama kullanılıp kullanılmayacağını belirtir. |
Hayır |
false |
|
retrySleepTime |
Milisaniye cinsinden yeniden denemeler arasındaki süre. |
Hayır |
10.000 |
|
discovery |
Düğüm keşfinin etkinleştirilip etkinleştirilmeyeceğini belirtir.
|
Hayır |
false |
|
compression |
İstek gövdesini sıkıştırmak için GZIP kullanılıp kullanılmayacağını belirtir. GZIP kullanıyorsanız Elasticsearch düğümünde http.compression ayarını etkinleştirmeniz gerekir. |
Hayır |
false |
|
dateFormat |
Senkronize edilecek bir alan tarih türündeyse ve alan eşlemesinde bir biçim belirtilmemişse dateFormat parametresini yapılandırmanız gerekir. Bu yapılandırma, senkronize edilecek tarih türü alanların tüm biçimlerini içermelidir. Örnek: |
Hayır |
Yok |
|
full |
Belgenin tamamının içeriğinin tek bir alan olarak hedefe senkronize edilip edilmeyeceğini belirtir. Daha fazla bilgi için bkz. Senaryo 1: Tam veri çekme. |
Hayır |
Yok |
|
multi |
Beş kullanım durumu olan gelişmiş bir özelliktir. |
Hayır |
Yok |
Writer komut dosyası demosu
{
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle":true, // If throttle is false, the mbps parameter is ignored and throttling is disabled. If throttle is true, throttling is enabled.
"concurrent":1, // The job concurrency.
"mbps":"12" // The maximum rate in Mbps (1 Mbps = 1 MB/s).
}
},
"steps": [
{
"category": "reader",
"name": "Reader",
"parameter": {
},
"stepType": "stream"
},
{
"category": "writer",
"name": "Writer",
"parameter": {
"datasource":"xxx",
"index": "test-1",
"type": "default",
"cleanup": true,
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"discovery": false,
"primaryKeyInfo":{
"type":"pk",
"fieldDelimiter":",",
"column":[]
},
"batchSize": 1000,
"dynamic":false,
"esPartitionColumn":[
{
"name":"col1",
"comment":"xx",
"type":"STRING"
}
],
"column": [
{
"name": "pk",
"type": "id"
},
{
"name": "col_ip",
"type": "ip"
},
{
"name": "col_array",
"type": "long",
"array": true
},
{
"name": "col_double",
"type": "double"
},
{
"name": "col_long",
"type": "long"
},
{
"name": "col_integer",
"type": "integer"
},
{
"name": "col_keyword",
"type": "keyword"
},
{
"name": "col_text",
"type": "text",
"analyzer": "ik_max_word",
"other_params":
{
"doc_values": false
}
},
{
"name": "col_geo_point",
"type": "geo_point"
},
{
"name": "col_date",
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
{
"name": "col_nested1",
"type": "nested"
},
{
"name": "col_nested2",
"type": "nested"
},
{
"name": "col_object1",
"type": "object"
},
{
"name": "col_object2",
"type": "object"
},
{
"name": "col_integer_array",
"type": "integer",
"array": true
},
{
"name": "col_geo_shape",
"type": "geo_shape",
"tree": "quadtree",
"precision": "10m"
}
]
},
"stepType": "elasticsearch"
}
],
"type": "job",
"version": "2.0"
}
VPC ortamındaki bir Elasticsearch örneğine varsayılan kaynak grubundan erişilemeyebilir. Veri senkronizasyonu için bağlantıyı sağlamak amacıyla VPC'ye bağlanmak için serverless kaynak grubu (önerilen) veya Veri Entegrasyonu için özel bir kaynak grubu kullanmanız gerekir. Kaynak gruplarını ekleme hakkında daha fazla bilgi için bkz. Serverless kaynak grubu.
Writer komut dosyası parametreleri
|
Parametre |
Açıklama |
Gerekli |
Varsayılan |
|
datasource |
Elasticsearch veri kaynağının adı. Veri kaynağı DataWorks'te yoksa önce bir tane oluşturun. Daha fazla bilgi için bkz. Elasticsearch veri kaynağı yapılandırma. |
Evet |
Yok |
|
index |
Elasticsearch'teki dizinin adı. |
Evet |
Yok |
|
type |
Elasticsearch'teki dizinin türü. |
Hayır |
default |
|
cleanup |
Yazmadan önce hedef dizinin silinip yeniden oluşturulup oluşturulmayacağını belirtir.
|
Hayır |
false |
|
batchSize |
Elasticsearch'e toplu yazma başına düşen belge sayısı. |
Hayır |
1.000 |
|
trySize |
Elasticsearch'e yazma işlemi başarısız olduktan sonraki yeniden deneme sayısı. |
Hayır |
30 |
|
timeout |
İstemci zaman aşımı süresi. |
Hayır |
600.000 |
|
discovery |
Görev için düğüm keşfinin etkinleştirilip etkinleştirilmeyeceğini belirtir.
|
Hayır |
false |
|
compression |
HTTP istekleri için sıkıştırmanın etkinleştirilip etkinleştirilmeyeceğini belirtir. |
Hayır |
true |
|
multiThread |
HTTP istekleri için birden fazla iş parçacığı kullanılıp kullanılmayacağını belirtir. |
Hayır |
true |
|
ignoreWriteError |
Yazma hatalarının yoksayılıp yoksayılmayacağını belirtir. true olarak ayarlanırsa sistem başarısız işlemi atlar ve sonraki verileri yazmaya devam eder. |
Hayır |
false |
|
ignoreParseError |
Veri biçimi ayrıştırma hatalarının yoksayılıp yoksayılmayacağını ve sonraki verilerin yazılmaya devam edilip edilmeyeceğini belirtir. |
Hayır |
true |
|
alias |
Elasticsearch takma adı, bir veritabanı görünümü gibi çalışır. Örneğin, my_index dizini için my_index_alias adında bir takma adı oluşturursanız my_index_alias üzerindeki işlemler my_index dizinine uygulanır. Yapılandırılırsa veri aktarımı tamamlandıktan sonra belirtilen dizin için bir takma ad oluşturulur. |
Hayır |
Yok |
|
aliasMode |
Veri aktarımı tamamlandıktan sonraki takma ad modu. Geçerli değerler append ve exclusive şeklindedir.
Sistem takma adı gerçek dizin adına çözer. Takma adları dizin geçişi, birden fazla dizinde birleşik sorgular ve görünüm benzeri işlevsellik uygulamak için kullanabilirsiniz. |
Hayır |
append |
|
settings |
Dizin oluşturma ayarları, resmi Elasticsearch ayarlarıyla aynı biçimdedir. |
Hayır |
Yok |
|
column |
column parametresi bir belgedeki alanları yapılandırır. Her alan için name ve type gibi temel özelliklerin yanı sıra Analyzer, Format ve Array gibi gelişmiş özellikleri ayarlayabilirsiniz. Elasticsearch tarafından desteklenen alan türleri şunlardır:
Sütun türleriyle ilgili notlar:
column içindeki bir alan için type dışındaki Elasticsearch niteliklerini yapılandırmak üzere
Kaynak verileri Elasticsearch'e bir dizi olarak yazmak istiyorsanız kaynak verileri JSON biçiminde veya belirtilen bir ayırıcı kullanarak ayrıştırabilirsiniz. Daha fazla bilgi için bkz. Ek 2: Verileri Elasticsearch'e dizi olarak yazma. |
Evet |
Yok |
|
dynamic |
Belgedeki yeni alanlar için eşlemelerin otomatik olarak eklenmesi amacıyla Elasticsearch dinamik eşlemesinin kullanılıp kullanılmayacağını belirtir.
Elasticsearch 7.x'te varsayılan type değeri _doc şeklindedir. Otomatik eşlemeler kullanıyorsanız türü _doc ve esVersion değerini Komut dosyası moduna geçmeniz ve sürüm parametresini eklemeniz gerekir: Önemli
Alan eşleme hatalarıyla karşılaşırsanız sorunu çözmek için bu parametreyi etkinleştirmeyi deneyebilirsiniz. Ancak bu durum alan türlerinin beklentilerinizle tutarsız hale gelmesine veya veri anomalilerine yol açabilir. Etkinleştirmeden önce veri yapınız için riskleri değerlendirin. |
Hayır |
false |
|
actionType |
Yazma eylemi türünü belirtir. Geçerli değerler index ve update şeklindedir:
|
Hayır |
index |
|
primaryKeyInfo |
Elasticsearch'te belge birincil anahtarının nasıl belirleneceğini belirtir.
|
Evet |
specific |
|
esPartitionColumn |
Elasticsearch yönlendirme parametresini ayarlayarak bölümlenmiş yazmayı etkinleştirip etkinleştirmeyeceğinizi belirtir.
|
Hayır |
false |
|
enableWriteNull |
Kaynaktaki null alanların Elasticsearch'e yazılıp yazılmayacağını belirtir. Geçerli değerler:
|
Hayır |
true |
Ek 2: Dizilerin Elasticsearch'e yazılması
Kaynak verileri iki yöntemden birini kullanarak Elasticsearch'e dizi olarak yazabilirsiniz.
-
JSON biçimindeki verileri ayrıştırma
Örneğin, kaynak veri
"[1,2,3,4,5]"ise json_array=true ayarını yaparak verileri ayrıştırın. Ardından veriler dizi olarak Elasticsearch'e yazılır."parameter" : { { "name":"docs_1", "type":"keyword", "json_array":true } } -
Ayırıcı kullanarak verileri ayrıştırma
Örneğin, kaynak veri
"1,2,3,4,5"ise splitter="," ayarını yaparak verileri ayrıştırın. Ardından veriler dizi olarak Elasticsearch'e yazılır.NotSplitter parametresi görev için genel olduğundan bir görev yalnızca bir ayırıcıyı destekler. Bu nedenle birden fazla dizi alanı için farklı ayırıcılar yapılandıramazsınız. Örneğin, kaynak verilerinizde
col1="1,2,3,4,5"vecol2="6-7-8-9-10"sütunları varsa her sütun için ayrı bir ayırıcı yapılandıramazsınız."parameter" : { "column": [ { "name": "docs_2", "array": true, "type": "long" } ], "splitter":","// Note: The splitter parameter must be at the same level as the column parameter. }
Ek 3: Senaryo örnekleri
Senaryo 1: Tam veri çekme
Arka plan: Tüm bir Elasticsearch belgesini tek bir alana çeker.
-
Örnek yapılandırma:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "IXgdO4MB4GR_1DmrjTXP", "_score": 1.0, "_source": { "feature1": "value1", "feature2": "value2", "feature3": "value3" } }] ## Data Integration Elasticsearch reader configuration "parameter": { "column": [ "content" ], "full":true } ## writer result: Writes one row and one column to the destination. {"_index":"mutiltest_1","_type":"_doc","_id":"IXgdO4MB4GR_1DmrjTXP","_source":{"feature1":"value1","feature2":"value2","feature3":"value3"},"sort":["IXgdO4MB4GR_1DmrjTXP"]}
Senaryo 2: İç içe geçmiş veya nesne alanı özelliklerini senkronize etme
Arka plan: Bir
objectveyanestedalanının özelliklerine erişmek için bir yol kullanır.-
Sözdizimi:
property
property.sub-property
property[0].sub-property
-
Kod düzenleyici yapılandırması:
"multi":{ "multi":true }NotBu özellik kodsuz kullanıcı arayüzünde desteklenmez.
-
Örnek yapılandırma:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "7XAOOoMB4GR_1Dmrrust", "_score": 1.0, "_source": { "level1": { "level2": [ { "level3": "testlevel3_1" }, { "level3": "testlevel3_2" } ] } } } ] ## Data Integration Elasticsearch reader configuration "parameter": { "column": [ "level1", "level1.level2", "level1.level2[0]", "level1.level2.level3" ], "multi":{ "multi":true } } ## writer result: 1 row, 4 columns column1(level1): {"level2":[{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}]} column2(level1.level2): [{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}] column3(level1.level2[0]): {"level3":"testlevel3_1"} column4(level1.level2.level3): nullNotYoldaki bir üst düğüm bir dizi ise sonuç
nullolur. Örneğin,level1.level2.level3alma işlemilevel2bir dizi olduğu içinnulldöndürür. Özelliğe erişmek içinlevel1.level2[0].level3veyalevel1.level2[1].level3gibi bir dizin belirtmeniz gerekir.level1.level2[*].level3joker karakter sözdizimi desteklenmez.Nokta (
.) içeren anahtarlar desteklenmez. Örneğin, veri{"level1.level2":{"level3":"testlevel3_1"}}ise sonuçnullolur.
Senaryo 3: Bir dizi özelliğini birden fazla satıra ayırma
Arka plan: Bire çok ilişkiler için her öğeyi ayrı bir satıra bölerek bir diziyi genişletebilirsiniz.
Sözdizimi:
property[*].sub-propertyÖrnek etki:
{ "splitKey": [1, 2, 3, 4, 5] }gibi kaynak veriler, diziden her biri bir öğe içeren beş satıra dönüştürülür.-
Kod düzenleyici yapılandırması:
"multi":{ "multi":true, "key": "headers" }NotKodsuz kullanıcı arayüzünde aynı etkiyi elde etmek için split multi-row array column name parametresini ayarlayarak ilgili komut dosyası yapılandırmasını otomatik olarak oluşturabilirsiniz.
keyile belirtilen özelliğin değeri bir liste olmalıdır. Aksi takdirde hata oluşur.
-
Örnek yapılandırma:
## reader: Original data in Elasticsearch [ { "_index": "lmtestjson", "_type": "_doc", "_id": "nhxmIYMBKDL4VkVLyXRN", "_score": 1.0, "_source": { "headers": [ { "remoteip": "192.0.2.1" }, { "remoteip": "192.0.2.2" } ] } }, { "_index": "lmtestjson", "_type": "_doc", "_id": "wRxsIYMBKDL4VkVLcXqf", "_score": 1.0, "_source": { "headers": [ { "remoteip": "192.0.2.3" }, { "remoteip": "192.0.2.4" } ] } } ] ## Data Integration Elasticsearch reader configuration { "column":[ "headers[*].remoteip" ] "multi":{ "multi":true, "key": "headers" } } ## writer result: 4 rows 192.0.2.1 192.0.2.2 192.0.2.3 192.0.2.4
Senaryo 4: Dizi özelliklerini yinelemesiz hale getirme ve birleştirme
Arka plan: Dizi öğelerini yinelenmeyen hale getirir ve virgülle ayrılmış bir dizede birleştirir. Bu işlem
name1.name2gibi alt özelliklerle de çalışır. Yinelenmeme işlemi her öğenintoString()sonucuna dayanır.-
Sözdizimi:
property[].Sütun adında
[]bulunması bu yinelenmeme ve birleştirme işlemini tetikler. -
Kod düzenleyici yapılandırması:
"multi":{ "multi":true }NotBu özellik kodsuz kullanıcı arayüzünde desteklenmez.
-
Örnek yapılandırma:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "4nbUOoMB4GR_1Dmryj8O", "_score": 1.0, "_source": { "feature1": [ "value1", "value1", "value2", "value2", "value3" ] } } ] ## Data Integration Elasticsearch reader configuration "parameter": { "column":[ "feature1[]" ], "multi":{ "multi":true } } ## writer result: 1 row, 1 column "value1,value2,value3"
Senaryo 5: Birden fazla özelliği seçici olarak senkronize etme
Arka plan: Belirtilen listeden ilk boş olmayan özellik değerini döndürür. Tüm özellikler null veya yoksa
nulldöndürülür.-
Sözdizimi:
property1|property2|...Sütun adında dikey çizgi (
|) karakterinin bulunması bu çoklu özellik seçimini tetikler. -
Kod düzenleyici yapılandırması:
"multi":{ "multi":true }NotBu özellik kodsuz kullanıcı arayüzünde desteklenmez.
-
Örnek yapılandırma:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "v3ShOoMB4GR_1DmrZN22", "_score": 1.0, "_source": { "feature1": "feature1", "feature2": [ 1, 2, 3 ], "feature3": { "child": "feature3" } } }] ## Data Integration Elasticsearch reader configuration "parameter": { "column":[ "feature1|feature2|feature3" ], "multi":{ "multi":true } } ## writer result: 1 row, 1 column "feature1"
Senaryo 6: Birden fazla özelliği birleştirme ve senkronize etme
Arka plan: Birden fazla özellik değerini tek bir virgülle ayrılmış dizede birleştirir.
-
Sözdizimi:
property1,property2,...Sütun adında virgül (
,) bulunması bu çoklu özellik birleştirme işlemini tetikler. -
Kod düzenleyici yapılandırması:
"multi":{ "multi":true }NotBu özellik kodsuz kullanıcı arayüzünde desteklenmez.
-
Örnek yapılandırma:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "v3ShOoMB4GR_1DmrZN22", "_score": 1.0, "_source": { "feature1": "feature1", "feature2": [ 1, 2, 3 ], "feature3": { "child": "feature3" } } }] ## Data Integration Elasticsearch reader configuration "parameter": { "column":[ "feature1,feature2,feature3" ], "multi":{ "multi":true } } ## writer result: 1 row, 1 column "feature1,[1,2,3],{\"child\":\"feature3\"}"
Başvurular
Data Integration birçok başka veri kaynağını destekler. Tam liste için bkz. Desteklenen veri kaynakları ve senkronizasyon çözümleri.