Sumber data Elasticsearch menyediakan saluran dua arah untuk membaca dan menulis data ke Elasticsearch. Topik ini menjelaskan kemampuan sinkronisasi data yang didukung oleh DataWorks untuk Elasticsearch.
Ruang Lingkup
Elasticsearch 5.x didukung pada grup sumber daya publik. Elasticsearch versi 5.x, 6.x, 7.x, dan 8.x didukung pada grup sumber daya serverless (direkomendasikan) dan grup sumber daya eksklusif untuk Integrasi Data.
Untuk informasi lebih lanjut tentang grup sumber daya serverless, lihat Gunakan grup sumber daya serverless.
Untuk informasi lebih lanjut tentang grup sumber daya eksklusif untuk Data Integration, lihat Gunakan grup sumber daya eksklusif untuk Data Integration.
Elasticsearch adalah mesin pencarian dan analisis data terdistribusi berbasis Lucene. Sebagai mesin pencarian tingkat perusahaan utama, produk open source ini sesuai dengan lisensi open source Apache. Tabel berikut memetakan konsep inti Elasticsearch ke konsep-konsep dalam database relasional.
Elasticsearch | Database Relasional |
Elasticsearch (instans) | Database Relasional (instans) |
Indeks | Database |
Tipe | Tabel |
Dokumen | Baris |
Bidang | Kolom |
Instans Elasticsearch dapat berisi beberapa Indeks (database). Setiap Indeks dapat berisi beberapa tipe (tabel). Setiap tipe dapat berisi beberapa dokumen (baris), dan setiap dokumen dapat memiliki beberapa bidang (kolom). Plug-in penulis Elasticsearch menggunakan REST API Elasticsearch untuk menulis data yang dibaca dari pembaca ke Elasticsearch secara batch.
Versi yang Didukung
DataWorks hanya mendukung sumber data Elasticsearch versi 5.x, 6.x, 7.x, dan 8.x milik Alibaba Cloud. Anda tidak dapat menambahkan sumber data Elasticsearch yang dikelola sendiri.
Batasan
Berikut ini adalah batasan yang berlaku saat melakukan operasi pembacaan dan penulisan offline pada sumber data Elasticsearch:
Elasticsearch Reader mengambil informasi shard dari server untuk sinkronisasi data. Pastikan bahwa shard di server aktif selama sinkronisasi data. Jika tidak, ketidaksesuaian data mungkin terjadi.
Jika Anda menggunakan Elasticsearch versi 6.x atau yang lebih baru, gunakan grup sumber daya serverless (direkomendasikan) atau grup sumber daya eksklusif untuk Integrasi Data.
Bidang bertipe scaled_float tidak dapat disinkronkan.
Indeks yang mengandung kata kunci
$refdi dalam bidang tidak dapat disinkronkan.
Tipe bidang yang didukung
Tipe | Pembacaan Offline (Elasticsearch Reader) | Penulisan Offline (Elasticsearch Writer) | Penulisan Waktu Nyata |
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 kerjanya
Elasticsearch Reader bekerja sebagai berikut:
Menggunakan metode _search, scroll, dan slice dari Elasticsearch. Fitur slice bekerja bersama dengan mekanisme sharding multi-threaded dari tugas Integrasi Data.
Mentransformasi 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. Pastikan bahwa shard di server aktif selama sinkronisasi data. Jika tidak, ketidaksesuaian data mungkin terjadi.
Konfigurasi Dasar
Hapus komentar sebelum menjalankan kode.
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // Jumlah catatan kesalahan.
},
"jvmOption":"",
"speed":{
"concurrent":3,// Jumlah thread bersamaan.
"throttle":true,//
"mbps":"12",// Pembatasan kecepatan. 1 Mbps = 1 MB/s.
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // Kolom yang akan dibaca.
"id",
"name"
],
"endpoint":"", // Titik akhir.
"index":"", // Indeks.
"password":"", // Kata sandi.
"scroll":"", // Penanda scroll.
"search":"", // Parameter kueri. Ini sama dengan konten kueri Elasticsearch. API _search digunakan dan diubah namanya menjadi search.
"type":"default",
"username":"" // Nama pengguna.
},
"stepType":"elasticsearch"
},
{
"stepType": "elasticsearch",
"parameter": {
"column": [ // Kolom yang akan ditulis.
{
"name": "id",
"type": "integer"
},
{
"name": "name",
"type": "text"
}
],
"index": "test", // Indeks tujuan.
"indexType": "", // Jenis indeks tujuan. Kosongkan untuk Elasticsearch 7.x.
"actionType": "index", // Mode penulisan.
"cleanup": false, // Menentukan apakah akan melakukan pengindeksan ulang.
"datasource": "test", // Nama sumber data.
"primaryKeyInfo": { // Metode untuk mendapatkan nilai kunci utama.
"fieldDelimiterOrigin": ",",
"column": [
"id"
],
"type": "specific",
"fieldDelimiter": ","
},
"dynamic": false, // Pemetaan dinamis.
"batchSize": 1024 // Jumlah dokumen yang ditulis dalam satu batch.
},
"name": "Writer",
"category": "writer"
}
],
"type":"job",
"version":"2.0" // Nomor versi.
}Fitur Lanjutan
Pengambilan Data Penuh
Anda dapat menarik semua isi dokumen di Elasticsearch sebagai satu bidang tunggal. Untuk informasi lebih lanjut tentang konfigurasi, lihat Skenario 1: Pengambilan data penuh.
Ekstraksi Data Semi-terstruktur menjadi Data Terstruktur
Kategori
Deskripsi
Referensi
Latar Belakang
Data di Elasticsearch sering kali memiliki bidang yang tidak tetap, nama bidang dalam bahasa Cina, dan bersarang dalam. Untuk memenuhi persyaratan bisnis hilir untuk komputasi dan penyimpanan data, DataWorks menyediakan solusi untuk mentransformasi data semi-terstruktur ini menjadi data terstruktur.
-
Cara Kerjanya
Fitur pengambilan jalur alat JSON meratakan data JSON bersarang dari Elasticsearch menjadi struktur satu dimensi. Data ini kemudian dipetakan ke tabel data terstruktur. Struktur data komposit dari Elasticsearch dibagi menjadi beberapa tabel data terstruktur.
-
Solusi
Jika data JSON bersarang, Anda dapat menggunakan jalur untuk menyelesaikannya.
property
property.sub-property
property[0].sub-property
Jika ada hubungan satu-ke-banyak, Anda dapat melintasi data dan membaginya menjadi tabel dan baris yang berbeda.
property[*].sub-property
Anda dapat menggabungkan isi larik string menjadi satu properti dan menghapus duplikat.
property[]
Anda dapat menggabungkan beberapa properti menjadi satu properti.
property1,property2
Anda dapat memproses beberapa properti secara selektif.
property1|property2
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, tambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen sumber data. Anda dapat melihat tip info parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Mengembangkan tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Konfigurasikan tugas sinkronisasi offline untuk tabel tunggal
Untuk informasi lebih lanjut tentang prosedur, lihat Konfigurasikan tugas di Antarmuka Tanpa Kode dan Konfigurasikan tugas di editor kode.
Untuk semua parameter dan demo skrip untuk editor kode, lihat Lampiran 1: Demo skrip dan deskripsi parameter.
Konfigurasikan tugas penulisan real-time untuk tabel tunggal
Untuk informasi lebih lanjut tentang prosedur, lihat Konfigurasikan tugas sinkronisasi real-time di DataStudio.
Konfigurasikan tugas penulisan offline untuk seluruh database atau tugas penulisan real-time penuh/inkremental untuk tabel tunggal atau seluruh database
Untuk informasi lebih lanjut tentang prosedur, lihat Konfigurasikan tugas sinkronisasi real-time untuk seluruh database.
Lampiran 1: Demo skrip dan deskripsi 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 Konfigurasikan tugas di editor kode. Informasi berikut menjelaskan parameter yang harus dikonfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Contoh skrip pembaca
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // Jumlah catatan kesalahan.
},
"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", // Indeks.
"password":"*******", // Kata sandi.
"multiThread":true,
"scroll":"5m", // Penanda scroll.
"pageSize":5000,
"connTimeOut":600000,
"readTimeOut":600000,
"retryCount":30,
"retrySleepTime":"10000",
"search":{
"range":{
"gmt_modified":{
"gte":0
}
}
}, // Parameter kueri Elasticsearch. Ini sama dengan konten kueri Elasticsearch. API _search digunakan dan diubah namanya menjadi search.
"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 pembaca
Parameter | Deskripsi | Diperlukan | Nilai default |
datasource | Nama sumber data. Anda dapat menambahkan sumber data di editor kode. Nilai parameter ini harus sama dengan nama sumber data yang telah ditambahkan. | Ya | Tidak ada |
index | Nama indeks di Elasticsearch. | Ya | Tidak ada |
type | Indeks tipe di Elasticsearch. | Tidak | Nama indeks |
search | Parameter kueri Elasticsearch. | Ya | Tidak ada |
pageSize | Jumlah entri data yang dibaca sekaligus. | Tidak | 100 |
scroll | Parameter paging Elasticsearch. Menentukan durasi scroll tetap aktif.
| Ya | Tidak ada |
strictMode | Menentukan apakah akan membaca data dari Elasticsearch dalam mode ketat. Jika terjadi kesalahan shard.failed di Elasticsearch, operasi baca berhenti untuk mencegah sejumlah kecil data dibaca. | Tidak | true |
sort | Bidang yang digunakan untuk mengurutkan hasil. | Tidak | Tidak ada |
retryCount | Jumlah percobaan ulang setelah kegagalan. | Tidak | 300 |
connTimeOut | Periode timeout koneksi untuk klien. | Tidak | 600.000 |
readTimeOut | Periode timeout baca untuk klien. | Tidak | 600.000 |
multiThread | Menentukan apakah akan menggunakan beberapa thread untuk permintaan HTTP. | Tidak | true |
preemptiveAuth | Menentukan apakah akan menggunakan otentikasi preventif untuk permintaan HTTP. | Tidak | false |
retrySleepTime | Interval antara percobaan ulang setelah kegagalan. | Tidak | 1000 |
discovery | Menentukan apakah akan mengaktifkan fitur penemuan node.
| Tidak | false |
compression | Menentukan apakah akan menggunakan GZIP untuk menekan badan permintaan. Jika Anda menggunakan fitur ini, Anda harus mengaktifkan pengaturan http.compression di node Elasticsearch. | Tidak | false |
dateFormat | Jika bidang yang akan disinkronkan adalah tipe tanggal dan pemetaan bidang ini tidak memiliki konfigurasi format, Anda harus mengonfigurasi parameter dateFormat. Konfigurasinya dalam format berikut: | Tidak | Tidak ada |
full | Menentukan apakah akan menyinkronkan seluruh konten dokumen sebagai satu bidang ke tujuan. Data yang diquery dari Elasticsearch diperlakukan sebagai satu bidang. Untuk informasi lebih lanjut tentang konfigurasi, lihat Skenario 1: Pengambilan data penuh. | Tidak | Tidak ada |
multi | Fitur lanjutan ini mencakup lima skenario penggunaan dan memiliki dua sub-properti: | Tidak | Tidak ada |
Contoh skrip penulis
{
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle":true,// Jika throttle disetel ke false, parameter mbps tidak berlaku, yang berarti tidak ada pembatasan. Jika throttle disetel ke true, pembatasan diaktifkan.
"concurrent":1, // Jumlah pekerjaan bersamaan.
"mbps":"12"// Pembatasan. 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 dalam VPC tidak dapat diakses dari grup sumber daya default karena isolasi jaringan. Gunakan grup sumber daya serverless (direkomendasikan) atau grup sumber daya eksklusif untuk Integrasi Data untuk mengakses VPC untuk sinkronisasi data. Untuk informasi lebih lanjut tentang cara menambahkan grup sumber daya, lihat Grup Sumber Daya Serverless.
Parameter skrip penulis
Parameter | Deskripsi | Diperlukan | Nilai Default |
datasource | Sumber data Elasticsearch tempat Anda ingin menyinkronkan data. Jika Anda belum membuat sumber data di DataWorks, buatlah satu. Untuk informasi lebih lanjut, lihat Konfigurasikan sumber data Elasticsearch. | Ya | Tidak ada |
index | Nama indeks di Elasticsearch. | Ya | Tidak ada |
indexType | Tipe indeks di Elasticsearch. | Tidak | Elasticsearch |
cleanup | Menentukan apakah akan menghapus data dari indeks yang ada.
| Tidak | false |
batchSize | Jumlah dokumen yang dimasukkan ke Elasticsearch sekaligus untuk tugas sinkronisasi. | Tidak | 1.000 |
trySize | Jumlah percobaan ulang setelah upaya gagal menulis data ke Elasticsearch. | Tidak | 30 |
timeout | Periode timeout untuk klien. | Tidak | 600.000 |
discovery | Menentukan apakah akan mengaktifkan fitur penemuan node untuk tugas tersebut.
| Tidak | false |
compression | Mengaktifkan kompresi untuk permintaan HTTP. | Tidak | true |
multiThread | Menentukan apakah akan menggunakan beberapa thread untuk permintaan HTTP. | Tidak | true |
ignoreWriteError | Mengabaikan kesalahan penulisan, tidak mencoba lagi, dan melanjutkan penulisan. | Tidak | false |
ignoreParseError | Mengabaikan kesalahan penguraian format data dan melanjutkan penulisan. | Tidak | true |
alias | Alias di Elasticsearch mirip dengan tampilan di database. Misalnya, jika Anda membuat alias bernama my_index_alias untuk indeks bernama my_index, operasi pada my_index_alias sama dengan operasi pada my_index. Jika Anda mengonfigurasi alias, alias dibuat untuk indeks yang ditentukan setelah data diimpor. | Tidak | Tidak ada |
aliasMode | Mode penambahan alias setelah data diimpor. Nilai valid: append dan exclusive.
Alias kemudian dikonversi menjadi nama indeks aktual. Alias dapat digunakan untuk migrasi indeks dan kueri terpadu dari beberapa indeks. Mereka juga dapat digunakan untuk mengimplementasikan fungsionalitas tampilan. | Tidak | append |
settings | Pengaturan untuk membuat indeks. Ini sesuai dengan pengaturan resmi Elasticsearch. | Tidak | Tidak ada |
column | Parameter column digunakan untuk mengonfigurasi informasi bidang untuk beberapa dokumen. Untuk setiap bidang, Anda dapat mengonfigurasi pengaturan dasar seperti name dan type, serta pengaturan ekstensi seperti Analyzer, Format, dan Array. Berikut adalah tipe bidang yang didukung oleh Elasticsearch. Berikut adalah deskripsi tipe kolom:
Untuk mengonfigurasi properti selain tipe di kolom, Anda dapat menggunakan parameter other_params. Parameter ini dikonfigurasi di column dan digunakan untuk mendeskripsikan properti Elasticsearch selain tipe di kolom saat memperbarui pemetaan. Jika Anda ingin menulis data sumber ke Elasticsearch dalam format larik, Anda dapat mengurai data sumber dalam format JSON atau dengan menentukan pemisah. Untuk informasi lebih lanjut tentang konfigurasi, lihat Lampiran 2: Menulis data ke Elasticsearch dalam format larik. | Ya | Tidak ada |
dynamic | Menentukan apakah tugas sinkronisasi menambahkan pemetaan untuk bidang yang tidak ada di dokumen menggunakan mekanisme pemetaan dinamis Elasticsearch.
Nilai default type untuk Elasticsearch 7.x adalah _doc. Saat menggunakan pemetaan otomatis di Elasticsearch, atur _doc dan esVersion ke 7. Anda perlu beralih ke editor kode dan menambahkan parameter versi: Penting Jika terjadi kesalahan pemetaan bidang, Anda dapat mengaktifkan parameter ini untuk mencoba menyelesaikan masalah. Namun, metode ini dapat menyebabkan tipe bidang tidak sesuai dengan harapan atau menyebabkan pengecualian data. Evaluasi risiko berdasarkan struktur data Anda sebelum memutuskan apakah akan mengaktifkannya. | Tidak | false |
actionType | Tipe aksi untuk menulis data ke Elasticsearch. Data Integration mendukung index dan update. Nilai default dari actionType adalah index.
| Tidak | index |
primaryKeyInfo | Menentukan metode untuk mendapatkan nilai kunci utama saat menulis ke Elasticsearch.
| Ya | specific |
esPartitionColumn | Menentukan apakah akan mengaktifkan partisi saat menulis ke Elasticsearch. Ini digunakan untuk memodifikasi parameter routing di Elasticsearch.
| Tidak | false |
enableWriteNull | Menentukan apakah akan menyinkronkan bidang nilai null dari sumber ke Elasticsearch. Nilai valid:
| Tidak | true |
Lampiran 2: Menulis data ke Elasticsearch dalam format larik
Anda dapat menggunakan dua metode berikut untuk menulis data sumber ke Elasticsearch sebagai larik.
Mengurai Data Sumber dalam Format JSON
Sebagai contoh, jika data sumber adalah
"[1,2,3,4,5]", setel json_array=true untuk mengurai data. Data kemudian ditulis ke Elasticsearch dalam format larik."parameter" : { { "name":"docs_1", "type":"keyword", "json_array":true } }Mengurai Data Sumber Menggunakan Pemisah
Sebagai contoh, jika data sumber adalah
"1,2,3,4,5", setel pemisah splitter="," untuk mengurai data. Data kemudian ditulis ke Elasticsearch dalam format larik.CatatanTugas hanya mendukung satu jenis pemisah. Parameter splitter bersifat unik secara global. Anda tidak dapat mengonfigurasi pemisah berbeda untuk beberapa kolom larik. Sebagai contoh, jika bidang sumber adalah
col1="1,2,3,4,5"dancol2="6-7-8-9-10", Anda tidak dapat mengonfigurasi pemisah terpisah untuk setiap bidang."parameter" : { "column": [ { "name": "docs_2", "array": true, "type": "long" } ], "splitter":","// Perhatikan: Konfigurasi splitter berada pada level yang sama dengan konfigurasi kolom. }
Skenario
Skenario 1: Pengambilan data penuh
Latar Belakang: Anda dapat menarik hasil kueri dokumen di Elasticsearch sebagai satu bidang tunggal.
Contoh:
## Reader: Data mentah di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "IXgdO4MB4GR_1DmrjTXP", "_score": 1.0, "_source": { "feature1": "value1", "feature2": "value2", "feature3": "value3" } }] ## Konfigurasi plug-in Elasticsearch Reader Data Integration "parameter": { "column": [ "content" ], "full":true } ## Hasil Penulis: Satu baris dan satu kolom disinkronkan ke tujuan. {"_index":"mutiltest_1","_type":"_doc","_id":"IXgdO4MB4GR_1DmrjTXP","_source":{"feature1":"value1","feature2":"value2","feature3":"value3"},"sort":["IXgdO4MB4GR_1DmrjTXP"]}
Skenario 2: Sinkronkan properti bidang bersarang atau objek
Latar Belakang: Saat menyinkronkan properti Objek atau bidang bersarang, Anda dapat menggunakan jalur untuk menyelesaikannya.
Konfigurasi:
property
property.sub-property
property[0].sub-property
Konfigurasi Skrip:
"multi":{ "multi":true }CatatanKonfigurasi ini saat ini tidak tersedia di antarmuka tanpa kode.
Contoh:
## Reader: Data mentah di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "7XAOOoMB4GR_1Dmrrust", "_score": 1.0, "_source": { "level1": { "level2": [ { "level3": "testlevel3_1" }, { "level3": "testlevel3_2" } ] } } } ] ## Konfigurasi plug-in Elasticsearch reader Data Integration "parameter": { "column":[ "level1", "level1.level2", "level1.level2[0]", "level1.level2.level3" ], "multi":{ "multi":true } } ## Hasil Penulis: Satu baris data dengan empat 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): nullCatatanJika node induk dari node yang diambil berisi larik, hasilnya adalah null. Sebagai contoh, pengambilan `level1.level2.level3` tidak melaporkan kesalahan, tetapi hasil sinkronisasi adalah null. Anda harus mengonfigurasi jalur sebagai `level1.level2[0].level3` atau `level1.level2[1].level3`. Format `level1.level2[*].level3` saat ini tidak didukung.
Data yang mengandung titik (.) di dalam kunci tidak didukung, seperti `{"level1.level2":{"level3":"testlevel3_1"}}`. Dalam hal ini, hasil pengambilan untuk entri data ini adalah null.
Skenario 3: Pisahkan properti larik menjadi beberapa baris
Latar Belakang: Jika ada hubungan satu-ke-banyak, Anda dapat membagi kolom larik menjadi beberapa baris.
Konfigurasi: property[*].sub-property
Efek: Data sumber seperti `{ "splitKey" :[1,2,3,4,5]}` dibagi dan ditulis ke tujuan sebagai lima baris terpisah.
Konfigurasi Skrip:
"multi":{ "multi":true, "key": "headers" }CatatanDi antarmuka tanpa kode, mengonfigurasi Split Multi-row Array Column Name secara otomatis menghasilkan konfigurasi skrip yang setara.
Nilainya harus berupa daftar. Jika tidak, kesalahan terjadi.
Contoh:
## Reader: Data mentah 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 plug-in Elasticsearch reader Data Integration { "column":[ "headers[*].remoteip" ] "multi":{ "multi":true, "key": "headers" } } ## Hasil Penulis: 4 baris 192.0.2.1 192.0.2.2 192.0.2.3 192.0.2.4
Skenario 4: Deduplikasi dan gabungkan properti larik
Latar Belakang: Anda dapat menduplikasi dan menggabungkan properti larik, lalu menulis hasilnya sebagai properti string. Properti larik bisa berupa sub-properti, seperti `name1.name2`. Hasil `toString` digunakan sebagai standar untuk deduplikasi.
Konfigurasi: `property[]`.
Jika nama kolom mengandung `[]`, deduplikasi dan penggabungan dilakukan pada properti ini.
Konfigurasi Skrip:
"multi":{ "multi":true }CatatanParameter ini tidak dapat dikonfigurasi di antarmuka tanpa kode.
Contoh:
## Reader: Data mentah di Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "4nbUOoMB4GR_1Dmryj8O", "_score": 1.0, "_source": { "feature1": [ "value1", "value1", "value2", "value2", "value3" ] } } ] ## Konfigurasi plug-in Elasticsearch reader Data Integration "parameter": { "column":[ "feature1[]" ], "multi":{ "multi":true } } ## Hasil Penulis: Satu baris dan satu kolom data "value1,value2,value3"
Skenario 5: Gabungkan dan sinkronkan beberapa properti
Latar Belakang: Anda dapat memproses beberapa properti secara selektif. Properti pertama yang memiliki nilai dikembalikan. Jika tidak ada properti yang ditentukan, null ditulis.
Konfigurasi: `property1|property2|...`
Jika nama kolom mengandung pemisah `|`, beberapa properti dipilih untuk item ini.
Konfigurasi Skrip:
"multi":{ "multi":true }CatatanParameter ini tidak dapat dikonfigurasi di antarmuka tanpa kode.
Contoh:
## Reader: Data mentah 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 plug-in Elasticsearch reader Data Integration "parameter": { "column":[ "feature1|feature2|feature3" ], "multi":{ "multi":true } } ## Hasil Penulis: Satu baris dan satu kolom data "feature1"
Skenario 6: Sinkronkan beberapa properti secara selektif
Latar Belakang: Anda dapat memproses beberapa properti secara selektif. Properti pertama yang memiliki nilai dikembalikan. Jika tidak ada properti yang ditentukan, null ditulis.
Konfigurasi: `property1|property2|...`
Jika nama kolom mengandung pemisah `|`, beberapa properti dipilih untuk item ini.
Konfigurasi Skrip:
"multi":{ "multi":true }CatatanParameter ini tidak dapat dikonfigurasi di antarmuka tanpa kode.
Contoh:
## Reader: Data mentah 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 plug-in Elasticsearch reader Data Integration "parameter": { "column":[ "feature1,feature2,feature3" ], "multi":{ "multi":true } } ## Hasil Penulis: Satu baris dan satu kolom data "feature1,[1,2,3],{"child":"feature3"}"
Referensi
Data Integration mendukung sumber data tambahan. Untuk informasi lebih lanjut, lihat Sumber data yang didukung dan solusi sinkronisasi.