Sumber data Elasticsearch menyediakan saluran baca dan tulis dua arah untuk menyinkronkan data antara DataWorks dan Elasticsearch.
Penerapan
Kelompok sumber daya publik mendukung Elasticsearch 5.x, sedangkan kelompok sumber daya Serverless (direkomendasikan) dan kelompok sumber daya eksklusif untuk Integrasi Data mendukung Elasticsearch 5.x, 6.x, 7.x, dan 8.x.
-
Untuk detail tentang kelompok sumber daya Serverless, lihat Gunakan kelompok sumber daya Serverless.
-
Untuk detail tentang kelompok sumber daya eksklusif untuk integrasi data, lihat Gunakan kelompok sumber daya eksklusif untuk integrasi data.
Elasticsearch adalah mesin pencarian open-source tingkat enterprise yang dikembangkan di bawah lisensi Apache. Dibangun di atas Lucene, Elasticsearch menyediakan kemampuan pencarian terdistribusi dan analisis data. Tabel berikut memetakan konsep inti Elasticsearch ke padanannya dalam database relasional.
|
Elasticsearch |
Database relasional |
|
Elasticsearch (instans) |
database relasional (instans) |
|
index |
database |
|
type |
table |
|
document |
row |
|
field |
column |
Satu instans Elasticsearch dapat berisi beberapa index. Setiap index menyimpan beberapa type, setiap type berisi beberapa document, dan setiap document terdiri dari beberapa field. Plugin Elasticsearch Writer menggunakan Elasticsearch REST API untuk menulis data secara batch ke Elasticsearch.
Versi yang didukung
DataWorks mendukung versi Alibaba Cloud Elasticsearch 5.x, 6.x, 7.x, dan 8.x, tetapi tidak mendukung Elasticsearch yang dikelola sendiri.
Batasan
Batasan berikut berlaku untuk operasi baca dan tulis offline ke Elasticsearch:
-
Elasticsearch Reader mengambil informasi shard dari server untuk sinkronisasi data. Semua shard harus aktif selama proses sinkronisasi agar tidak terjadi inkonsistensi data.
-
Untuk Elasticsearch 6.x atau versi yang lebih baru, Anda dapat menggunakan kelompok sumber daya serverless (direkomendasikan) atau kelompok sumber daya eksklusif untuk Integrasi Data.
-
Field
scaled_floattidak dapat disinkronkan. -
Index tidak dapat disinkronkan jika nama field-nya mengandung kata kunci
$ref.
Tipe field yang didukung
|
Type |
Baca offline |
Tulis offline |
Tulis real-time |
|
binary |
Didukung |
Didukung |
Didukung |
|
boolean |
Didukung |
Didukung |
Didukung |
|
keyword |
Didukung |
Didukung |
Didukung |
|
constant_keyword |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
wildcard |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
long |
Didukung |
Didukung |
Didukung |
|
integer |
Didukung |
Didukung |
Didukung |
|
short |
Didukung |
Didukung |
Didukung |
|
byte |
Didukung |
Didukung |
Didukung |
|
double |
Didukung |
Didukung |
Didukung |
|
float |
Didukung |
Didukung |
Didukung |
|
half_float |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
scaled_float |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
unsigned_long |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
date |
Didukung |
Didukung |
Didukung |
|
date_nanos |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
alias |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
object |
Didukung |
Didukung |
Didukung |
|
flattened |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
nested |
Didukung |
Didukung |
Didukung |
|
join |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
integer_range |
Didukung |
Didukung |
Didukung |
|
float_range |
Didukung |
Didukung |
Didukung |
|
long_range |
Didukung |
Didukung |
Didukung |
|
double_range |
Didukung |
Didukung |
Didukung |
|
date_range |
Didukung |
Didukung |
Didukung |
|
ip_range |
Tidak didukung |
Didukung |
Didukung |
|
ip |
Didukung |
Didukung |
Didukung |
|
version |
Didukung |
Didukung |
Didukung |
|
murmur3 |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
aggregate_metric_double |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
histogram |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
text |
Didukung |
Didukung |
Didukung |
|
annotated-text |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
completion |
Didukung |
Tidak didukung |
Tidak didukung |
|
search_as_you_type |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
token_count |
Didukung |
Tidak didukung |
Tidak didukung |
|
dense_vector |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
rank_feature |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
rank_features |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
geo_point |
Didukung |
Didukung |
Didukung |
|
geo_shape |
Didukung |
Didukung |
Didukung |
|
point |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
shape |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
percolator |
Tidak didukung |
Tidak didukung |
Tidak didukung |
|
string |
Didukung |
Didukung |
Didukung |
Cara kerja
Elasticsearch Reader bekerja sebagai berikut:
-
Menggunakan Elasticsearch _searchscrollslice API, menggabungkan fitur scroll slice dengan sharding multi-threaded dari Integrasi Data.
-
Mengonversi tipe data berdasarkan konfigurasi pemetaan di Elasticsearch.
Untuk informasi lebih lanjut, lihat dokumentasi resmi Elasticsearch.
Elasticsearch Reader mengambil informasi shard dari server untuk sinkronisasi data. Untuk mencegah inkonsistensi data, Anda harus memastikan bahwa semua shard di sisi server tetap aktif selama proses sinkronisasi data.
Konfigurasi dasar
Di lingkungan produksi, hapus komentar dari kode sebelum menjalankan pekerjaan.
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // Batas error. Pekerjaan berhenti jika jumlah error melebihi nilai ini.
},
"jvmOption":"",
"speed":{
"concurrent":3, // Jumlah thread konkuren.
"throttle":true,
"mbps":"12" // Kecepatan maksimum dalam MB/s.
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // Kolom yang akan dibaca.
"id",
"name"
],
"endpoint":"", // Titik akhir layanan.
"index":"", // Index sumber.
"password":"", // Kata sandi untuk otentikasi.
"scroll":"", // Durasi konteks scroll.
"search":"", // Badan kueri, sama seperti objek `query` dalam permintaan `_search` Elasticsearch.
"type":"default",
"username":"" // Nama pengguna untuk otentikasi.
},
"stepType":"elasticsearch"
},
{
"stepType": "elasticsearch",
"parameter": {
"column": [ // Kolom yang akan ditulis.
{
"name": "id",
"type": "integer"
},
{
"name": "name",
"type": "text"
}
],
"index": "test", // Index tujuan.
"indexType": "", // Tipe index. Biarkan kosong untuk Elasticsearch v7.x atau yang lebih baru.
"actionType": "index", // Mode penulisan.
"cleanup": false, // Menentukan apakah akan membuat ulang index sebelum menulis.
"datasource": "test", // Nama sumber data.
"primaryKeyInfo": { // Konfigurasi kunci primer.
"fieldDelimiterOrigin": ",",
"column": [
"id"
],
"type": "specific",
"fieldDelimiter": ","
},
"dynamic": false, // Menentukan apakah akan mengaktifkan pemetaan dinamis.
"batchSize": 1024 // Jumlah dokumen yang ditulis per batch.
},
"name": "Writer",
"category": "writer"
}
],
"type":"job",
"version":"2.0" // Nomor versi.
}
Fitur lanjutan
-
Ambil seluruh dokumen
Anda dapat menarik seluruh isi dokumen Elasticsearch ke dalam satu field. Untuk detail konfigurasi, lihat Skenario 1: Ambil seluruh dokumen.
-
Ubah data semi-terstruktur menjadi data terstruktur
Kategori
Deskripsi
Referensi
Latar belakang
Data Elasticsearch sering memiliki field dinamis dan struktur bersarang yang dalam. Fitur ini mengubah data semi-terstruktur menjadi data terstruktur untuk komputasi dan penyimpanan downstream.
—
Cara kerja
Solusi ini mengurai data JSON dari Elasticsearch, menggunakan ekspresi path untuk meratakan struktur bersarang, dan memetakan hasilnya ke tabel terstruktur. Dokumen kompleks dapat dipisah menjadi beberapa tabel sesuai kebutuhan.
—
Solusi
Untuk data JSON bersarang, gunakan path untuk mengakses properti tertentu.
-
property
-
property.sub-property
-
property[0].sub-property
Untuk relasi satu-ke-banyak, uraikan properti array untuk membagi elemennya menjadi beberapa baris.
property[*].sub-property
Gabungkan dan hapus duplikat elemen dari array string menjadi satu properti.
property[]
Gabungkan beberapa properti menjadi satu properti.
property1,property2
Pilih properti pertama yang tidak null dari daftar.
property1|property2
-
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen sumber data. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Tugas sinkronisasi offline (tabel tunggal)
-
Lihat Konfigurasikan tugas di Antarmuka tanpa kode atau Konfigurasikan tugas di editor kode.
-
Untuk referensi parameter lengkap dan demo skrip, lihat Lampiran 1: Demo skrip dan deskripsi parameter.
Tugas tulis real-time (tabel tunggal)
Lihat Konfigurasikan tugas sinkronisasi real-time di DataStudio (Legacy).
Sinkronisasi real-time seluruh database
Lihat Konfigurasikan tugas sinkronisasi real-time seluruh database.
Lampiran 1: Demo skrip dan parameter
Konfigurasikan tugas sinkronisasi batch menggunakan editor kode
Jika ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasi mode skrip. Informasi berikut menjelaskan parameter yang harus dikonfigurasi untuk sumber data saat mengatur tugas sinkronisasi batch menggunakan editor kode.
Demo skrip Reader
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // Jumlah catatan error yang diizinkan.
},
"jvmOption":"",
"speed":{
"concurrent":3,
"throttle":false
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // Kolom yang akan dibaca.
"id",
"name"
],
"endpoint":"http://es-cn-xxx.elasticsearch.aliyuncs.com:9200", // Titik akhir.
"index":"aliyun_es_xx", // Index.
"password":"*******", // Kata sandi.
"multiThread":true,
"scroll":"5m", // Durasi konteks scroll.
"pageSize":5000,
"connTimeOut":600000,
"readTimeOut":600000,
"retryCount":30,
"retrySleepTime":"10000",
"search":{
"range":{
"gmt_modified":{
"gte":0
}
}
}, // Parameter kueri. Isinya identik dengan badan kueri API _search Elasticsearch.
"type":"doc",
"username":"aliyun_di" // Nama pengguna.
},
"stepType":"elasticsearch"
},
{
"category":"writer",
"name":"Writer",
"parameter":{ },
"stepType":"stream"
}
],
"type":"job",
"version":"2.0" // Nomor versi.
}
Parameter skrip Reader
|
Parameter |
Deskripsi |
Wajib |
Bawaan |
|
datasource |
Nama sumber data DataWorks yang sudah ada. |
Ya |
Tidak ada |
|
index |
Nama index di Elasticsearch. |
Ya |
Tidak ada |
|
type |
Nama type dari suatu index di Elasticsearch. |
Tidak |
Nama index |
|
search |
Badan kueri untuk Elasticsearch. |
Ya |
Tidak ada |
|
pageSize |
Jumlah catatan yang dibaca per halaman. |
Tidak |
100 |
|
scroll |
Menentukan berapa lama konteks scroll Elasticsearch tetap aktif untuk paginasi.
|
Ya |
Tidak ada |
|
strictMode |
Menentukan apakah akan mengaktifkan mode ketat. Jika diatur ke |
Tidak |
true |
|
sort |
Field yang digunakan untuk mengurutkan hasil. |
Tidak |
Tidak ada |
|
retryCount |
Jumlah kali percobaan ulang operasi yang gagal. |
Tidak |
30 |
|
connTimeOut |
Timeout koneksi klien, dalam milidetik. |
Tidak |
600.000 |
|
readTimeOut |
Timeout baca klien, dalam milidetik. |
Tidak |
600.000 |
|
multiThread |
Menentukan apakah akan menggunakan beberapa thread untuk permintaan HTTP. |
Tidak |
true |
|
preemptiveAuth |
Menentukan apakah akan menggunakan otentikasi preemptive untuk permintaan HTTP. |
Tidak |
false |
|
retrySleepTime |
Interval antar percobaan ulang, dalam milidetik. |
Tidak |
10.000 |
|
discovery |
Menentukan apakah akan mengaktifkan penemuan node.
|
Tidak |
false |
|
compression |
Menentukan apakah akan menggunakan GZIP untuk mengompres badan permintaan. Jika menggunakan GZIP, Anda harus mengaktifkan pengaturan http.compression pada node Elasticsearch. |
Tidak |
false |
|
dateFormat |
Jika field yang akan disinkronkan bertipe date dan pemetaan field tidak menentukan format, Anda harus mengonfigurasi parameter dateFormat. Konfigurasi ini harus mencakup semua format field bertipe date yang akan disinkronkan. Contoh: |
Tidak |
Tidak ada |
|
full |
Menentukan apakah akan menyinkronkan seluruh isi dokumen sebagai satu field ke tujuan. Untuk informasi lebih lanjut, lihat Skenario 1: Tarik seluruh data. |
Tidak |
Tidak ada |
|
multi |
Fitur lanjutan dengan lima kasus penggunaan. Memiliki dua sub-properti: |
Tidak |
Tidak ada |
Demo skrip Writer
{
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle":true, // Jika throttle bernilai false, parameter mbps diabaikan dan pembatasan kecepatan dinonaktifkan. Jika throttle bernilai true, pembatasan kecepatan diaktifkan.
"concurrent":1, // Konkurensi pekerjaan.
"mbps":"12" // Laju maksimum dalam 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"
}
Instans Elasticsearch di lingkungan VPC mungkin tidak dapat dijangkau dari kelompok sumber daya default. Untuk memastikan konektivitas sinkronisasi data, Anda harus menggunakan kelompok sumber daya serverless (direkomendasikan) atau kelompok sumber daya eksklusif untuk Integrasi Data agar terhubung ke VPC. Untuk informasi lebih lanjut tentang cara menambahkan kelompok sumber daya, lihat Kelompok sumber daya serverless.
Parameter skrip Writer
|
Parameter |
Deskripsi |
Wajib |
Bawaan |
|
datasource |
Nama sumber data Elasticsearch. Jika sumber data belum ada di DataWorks, buat terlebih dahulu. Untuk informasi lebih lanjut, lihat Konfigurasikan sumber data Elasticsearch. |
Ya |
Tidak ada |
|
index |
Nama index di Elasticsearch. |
Ya |
Tidak ada |
|
type |
Tipe index di Elasticsearch. |
Tidak |
default |
|
cleanup |
Menentukan apakah akan menghapus dan membuat ulang index tujuan sebelum menulis.
|
Tidak |
false |
|
batchSize |
Jumlah dokumen per batch yang ditulis ke Elasticsearch. |
Tidak |
1.000 |
|
trySize |
Jumlah percobaan ulang setelah penulisan ke Elasticsearch gagal. |
Tidak |
30 |
|
timeout |
Periode timeout klien. |
Tidak |
600.000 |
|
discovery |
Menentukan apakah akan mengaktifkan penemuan node untuk tugas.
|
Tidak |
false |
|
compression |
Menentukan apakah akan mengaktifkan kompresi untuk permintaan HTTP. |
Tidak |
true |
|
multiThread |
Menentukan apakah akan menggunakan beberapa thread untuk permintaan HTTP. |
Tidak |
true |
|
ignoreWriteError |
Menentukan apakah akan mengabaikan error penulisan. Jika diatur ke true, sistem melewati operasi yang gagal dan melanjutkan penulisan data berikutnya. |
Tidak |
false |
|
ignoreParseError |
Menentukan apakah akan mengabaikan error parsing format data dan melanjutkan penulisan data berikutnya. |
Tidak |
true |
|
alias |
Alias Elasticsearch bekerja seperti view database. Misalnya, jika Anda membuat alias bernama my_index_alias untuk index my_index, operasi pada my_index_alias akan diterapkan pada my_index. Jika dikonfigurasi, alias akan dibuat untuk index yang ditentukan setelah impor data selesai. |
Tidak |
Tidak ada |
|
aliasMode |
Mode alias setelah impor data selesai. Nilai yang valid adalah append dan exclusive.
Sistem menyelesaikan alias ke nama index aktual. Anda dapat menggunakan alias untuk migrasi index, kueri terpadu di beberapa index, dan mengimplementasikan fungsionalitas seperti view. |
Tidak |
append |
|
settings |
Pengaturan pembuatan index, dalam format yang sama dengan pengaturan resmi Elasticsearch. |
Tidak |
Tidak ada |
|
column |
Parameter column mengonfigurasi field dalam dokumen. Untuk setiap field, Anda dapat mengatur properti dasar seperti name dan type, serta properti lanjutan seperti Analyzer, Format, dan Array. Tipe field berikut didukung oleh Elasticsearch:
Catatan tentang tipe kolom:
Untuk mengonfigurasi atribut Elasticsearch selain type untuk suatu field dalam column, gunakan parameter
Jika Anda ingin menulis data sumber ke Elasticsearch sebagai array, Anda dapat mengurai data sumber dalam format JSON atau menggunakan delimiter tertentu. Untuk informasi lebih lanjut, lihat Lampiran 2: Menulis data ke Elasticsearch sebagai array. |
Ya |
Tidak ada |
|
dynamic |
Menentukan apakah akan menggunakan pemetaan dinamis Elasticsearch untuk secara otomatis menambahkan mapping untuk field baru dalam dokumen.
type bawaan di Elasticsearch 7.x adalah _doc. Jika menggunakan mapping otomatis, atur type ke _doc dan esVersion ke Anda harus beralih ke mode skrip dan menambahkan parameter versi: Penting
Jika mengalami error pemetaan field, Anda dapat mengaktifkan parameter ini untuk mencoba menyelesaikan masalah. Namun, hal ini dapat menyebabkan tipe field menjadi tidak sesuai harapan atau menyebabkan anomali data. Evaluasi risiko terhadap struktur data Anda sebelum mengaktifkannya. |
Tidak |
false |
|
actionType |
Menentukan tipe aksi penulisan. Nilai yang valid adalah index dan update:
|
Tidak |
index |
|
primaryKeyInfo |
Menentukan cara menentukan kunci primer dokumen di Elasticsearch.
|
Ya |
specific |
|
esPartitionColumn |
Menentukan apakah akan mengaktifkan penulisan terpartisi dengan mengatur parameter routing Elasticsearch.
|
Tidak |
false |
|
enableWriteNull |
Menentukan apakah akan menulis field null dari sumber ke Elasticsearch. Nilai yang valid:
|
Tidak |
true |
Lampiran 2: Menulis array ke Elasticsearch
Anda dapat menulis data sumber ke Elasticsearch sebagai array menggunakan salah satu dari dua metode berikut.
-
Urai data dalam format JSON
Misalnya, jika data sumber adalah
"[1,2,3,4,5]", uraikan data dengan mengatur json_array=true. Data tersebut kemudian ditulis ke Elasticsearch sebagai array."parameter" : { { "name":"docs_1", "type":"keyword", "json_array":true } } -
Urai data menggunakan delimiter
Misalnya, jika data sumber adalah
"1,2,3,4,5", uraikan data dengan mengatur splitter=",". Data tersebut kemudian ditulis ke Elasticsearch sebagai array.CatatanSatu tugas hanya mendukung satu delimiter karena parameter splitter bersifat global untuk tugas tersebut. Oleh karena itu, Anda tidak dapat mengonfigurasi delimiter berbeda untuk beberapa field array. Misalnya, jika data sumber Anda berisi kolom
col1="1,2,3,4,5"dancol2="6-7-8-9-10", Anda tidak dapat mengonfigurasi delimiter terpisah untuk setiap kolom."parameter" : { "column": [ { "name": "docs_2", "array": true, "type": "long" } ], "splitter":","// Catatan: Parameter splitter harus berada di tingkat yang sama dengan parameter column. }
Lampiran 3: Contoh skenario
Skenario 1: Tarik seluruh data
-
Latar belakang: Menarik seluruh dokumen Elasticsearch ke dalam satu field.
-
Contoh konfigurasi:
## reader: Data asli di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "IXgdO4MB4GR_1DmrjTXP", "_score": 1.0, "_source": { "feature1": "value1", "feature2": "value2", "feature3": "value3" } }] ## Konfigurasi reader Elasticsearch Integrasi Data "parameter": { "column": [ "content" ], "full":true } ## Hasil writer: Menulis satu baris dan satu kolom ke tujuan. {"_index":"mutiltest_1","_type":"_doc","_id":"IXgdO4MB4GR_1DmrjTXP","_source":{"feature1":"value1","feature2":"value2","feature3":"value3"},"sort":["IXgdO4MB4GR_1DmrjTXP"]}
Skenario 2: Sinkronkan properti field nested atau object
-
Latar belakang: Menggunakan path untuk mengakses properti field
objectataunested. -
Sintaks:
-
property
-
property.sub-property
-
property[0].sub-property
-
-
Konfigurasi editor kode:
"multi":{ "multi":true }CatatanFitur ini tidak didukung di Antarmuka tanpa kode.
-
Contoh konfigurasi:
## reader: Data asli di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "7XAOOoMB4GR_1Dmrrust", "_score": 1.0, "_source": { "level1": { "level2": [ { "level3": "testlevel3_1" }, { "level3": "testlevel3_2" } ] } } } ] ## Konfigurasi reader Elasticsearch Integrasi Data "parameter": { "column": [ "level1", "level1.level2", "level1.level2[0]", "level1.level2.level3" ], "multi":{ "multi":true } } ## Hasil writer: 1 baris, 4 kolom 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): nullCatatan-
Jika node leluhur dalam path berupa array, hasilnya adalah
null. Misalnya, mengambillevel1.level2.level3menghasilkannullkarenalevel2adalah array. Untuk mengakses properti tersebut, Anda harus menentukan indeks, sepertilevel1.level2[0].level3ataulevel1.level2[1].level3. Sintaks wildcardlevel1.level2[*].level3tidak didukung. -
Kunci yang mengandung titik (
.) tidak didukung. Misalnya, jika datanya adalah{"level1.level2":{"level3":"testlevel3_1"}}, hasilnya adalahnull.
-
Skenario 3: Pisahkan properti array menjadi beberapa baris
-
Latar belakang: Untuk relasi satu-ke-banyak, Anda dapat membuka array dengan membagi setiap elemen menjadi baris terpisah.
-
Sintaks:
property[*].sub-property -
Contoh efek: Data sumber seperti
{ "splitKey": [1, 2, 3, 4, 5] }diubah menjadi lima baris, dengan setiap baris berisi satu elemen dari array. -
Konfigurasi editor kode:
"multi":{ "multi":true, "key": "headers" }Catatan-
Di Antarmuka tanpa kode, Anda dapat mengatur parameter split multi-row array column name untuk mencapai efek yang sama dengan menghasilkan konfigurasi skrip yang sesuai secara otomatis.
-
Nilai properti yang ditentukan oleh
keyharus berupa daftar. Jika tidak, terjadi error.
-
-
Contoh konfigurasi:
## reader: Data asli di 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" } ] } } ] ## Konfigurasi reader Elasticsearch Integrasi Data { "column":[ "headers[*].remoteip" ] "multi":{ "multi":true, "key": "headers" } } ## Hasil writer: 4 baris 192.0.2.1 192.0.2.2 192.0.2.3 192.0.2.4
Skenario 4: Hapus duplikat dan gabungkan properti array
-
Latar belakang: Menghapus duplikat elemen array dan menggabungkannya menjadi string yang dipisahkan koma. Fitur ini juga berlaku untuk sub-properti seperti
name1.name2. Penghapusan duplikat didasarkan pada hasiltoString()setiap elemen. -
Sintaks:
property[].Menyertakan
[]dalam nama kolom memicu operasi penghapusan duplikat dan penggabungan ini. -
Konfigurasi editor kode:
"multi":{ "multi":true }CatatanFitur ini tidak didukung di Antarmuka tanpa kode.
-
Contoh konfigurasi:
## reader: Data asli di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "4nbUOoMB4GR_1Dmryj8O", "_score": 1.0, "_source": { "feature1": [ "value1", "value1", "value2", "value2", "value3" ] } } ] ## Konfigurasi reader Elasticsearch Integrasi Data "parameter": { "column":[ "feature1[]" ], "multi":{ "multi":true } } ## Hasil writer: 1 baris, 1 kolom "value1,value2,value3"
Skenario 5: Sinkronisasi selektif beberapa properti
-
Latar belakang: Mengembalikan nilai properti pertama yang tidak null dari daftar yang ditentukan. Jika semua properti bernilai null atau tidak ada,
nulldikembalikan. -
Sintaks:
property1|property2|...Menyertakan karakter pipa (
|) dalam nama kolom memicu pemilihan multi-properti ini. -
Konfigurasi editor kode:
"multi":{ "multi":true }CatatanFitur ini tidak didukung di Antarmuka tanpa kode.
-
Contoh konfigurasi:
## reader: Data asli di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "v3ShOoMB4GR_1DmrZN22", "_score": 1.0, "_source": { "feature1": "feature1", "feature2": [ 1, 2, 3 ], "feature3": { "child": "feature3" } } }] ## Konfigurasi reader Elasticsearch Integrasi Data "parameter": { "column":[ "feature1|feature2|feature3" ], "multi":{ "multi":true } } ## Hasil writer: 1 baris, 1 kolom "feature1"
Skenario 6: Gabungkan dan sinkronkan beberapa properti
-
Latar belakang: Menggabungkan nilai beberapa properti menjadi satu string yang dipisahkan koma.
-
Sintaks:
property1,property2,...Menyertakan koma (
,) dalam nama kolom memicu operasi penggabungan multi-properti ini. -
Konfigurasi editor kode:
"multi":{ "multi":true }CatatanFitur ini tidak didukung di Antarmuka tanpa kode.
-
Contoh konfigurasi:
## reader: Data asli di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "v3ShOoMB4GR_1DmrZN22", "_score": 1.0, "_source": { "feature1": "feature1", "feature2": [ 1, 2, 3 ], "feature3": { "child": "feature3" } } }] ## Konfigurasi reader Elasticsearch Integrasi Data "parameter": { "column":[ "feature1,feature2,feature3" ], "multi":{ "multi":true } } ## Hasil writer: 1 baris, 1 kolom "feature1,[1,2,3],{\"child\":\"feature3\"}"
Referensi
Integrasi Data mendukung banyak sumber data lainnya. Untuk daftar lengkap, lihat Sumber data yang didukung dan solusi sinkronisasi.