All Products
Search
Document Center

DataWorks:Sumber data Elasticsearch

Last Updated:Jul 18, 2026

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.

Catatan

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:

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.

Catatan

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

Penting

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

    Skenario 2: Sinkronkan properti field nested atau object

    Untuk relasi satu-ke-banyak, uraikan properti array untuk membagi elemennya menjadi beberapa baris.

    property[*].sub-property

    Skenario 3: Pisahkan properti array menjadi beberapa baris

    Gabungkan dan hapus duplikat elemen dari array string menjadi satu properti.

    property[]

    Skenario 4: Hapus duplikat dan gabungkan properti array

    Gabungkan beberapa properti menjadi satu properti.

    property1,property2

    Skenario 5: Penggabungan multi-properti

    Pilih properti pertama yang tidak null dari daftar.

    property1|property2

    Skenario 6: Pemilihan multi-properti

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)

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.

  • Menetapkan nilai terlalu rendah dapat menyebabkan konteks scroll kedaluwarsa selama interval panjang antara pembacaan halaman, sehingga mengakibatkan kehilangan data.

  • Jika nilai ini terlalu tinggi, kesalahan kueri dapat terjadi jika kueri konkuren melebihi batas max_open_scroll_context server.

Ya

Tidak ada

strictMode

Menentukan apakah akan mengaktifkan mode ketat. Jika diatur ke true, tugas baca berhenti saat terjadi error shard.failed untuk mencegah pembacaan data parsial.

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.

  • true: Klien terhubung ke node acak di kluster, secara berkala memperbarui daftar server, dan mengirim permintaan ke node yang ditemukan.

  • false: Mengirim permintaan hanya ke titik akhir yang dikonfigurasi.

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: "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss".

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: multi.key dan multi.mult. Untuk informasi lebih lanjut, lihat tabel di Fitur lanjutan.

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"
}
Catatan

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.

  • true: Menghapus dan membuat ulang index sebelum menulis, menghapus semua data yang ada.

  • false: Mempertahankan data yang ada di index.

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.

  • true: Terhubung ke node acak di kluster. Saat penemuan node diaktifkan, klien melakukan polling dan secara berkala memperbarui daftar server.

  • false: Klien hanya terhubung ke titik akhir yang dikonfigurasi di sumber data.

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.

  • Jika aliasMode diatur ke append, index saat ini ditambahkan ke pemetaan alias. Satu alias dapat memetakan ke beberapa index.

  • Jika aliasMode diatur ke exclusive, alias yang ada dihapus, lalu index saat ini ditambahkan ke pemetaan alias. Satu alias hanya dapat memetakan ke satu index.

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:

- id  // Tipe id dipetakan ke _id di Elasticsearch dan dapat dianggap sebagai kunci primer unik. Saat menulis data, dokumen dengan id yang sama akan saling menimpa dan tidak diindeks.
- string
- text
- keyword
- long
- integer
- short
- byte
- double
- float
- date
- boolean
- binary
- integer_range
- float_range
- long_range
- double_range
- date_range
- geo_point
- geo_shape
- ip
- token_count
- array
- object
- nested

Catatan tentang tipe kolom:

  • Untuk kolom bertipe text, Anda dapat mengonfigurasi parameter seperti analyzer, norms, dan index_options. Contoh:

    {
        "name": "col_text",
        "type": "text",
        "analyzer": "ik_max_word"
        }
  • Untuk kolom bertipe date, Anda dapat menggunakan salah satu metode berikut untuk mengurai data sumber. Gunakan metode yang sama secara konsisten.

    • Metode 1: Tulis nilai field dari reader langsung ke field es data.

      • Atur origin:true. Ini diperlukan untuk menulis nilai field mentah langsung ke es data.

      • Konfigurasi "format" untuk menunjukkan bahwa saat membuat mapping menggunakan es writer, properti format harus diatur untuk field ini. Berikut contohnya:

          {
             "parameter":{
               "column":[{
                   "name": "col_date",
                   "type": "date",
                   "format": "yyyy-MM-dd HH:mm:ss",
                   "origin": true
                }]
           }
        }
    • Metode 2 (Konversi zona waktu): Jika Anda ingin Integrasi Data mengonversi zona waktu, tambahkan parameter Timezone.

      "format" yang dikonfigurasi menentukan format waktu yang digunakan Integrasi Data untuk parsing selama konversi zona waktu. Contoh:

        {
           "parameter" :{
             "column": [{
                "name": "col_date",
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss",
               "Timezone": "UTC"
             }]
         }
      }
  • Untuk kolom bertipe geo_shape, Anda dapat mengonfigurasi atribut tree (geohash atau quadtree) dan precision. Contoh:

    {
        "name": "col_geo_shape",
        "type": "geo_shape",
        "tree": "quadtree",
        "precision": "10m"
        }

Untuk mengonfigurasi atribut Elasticsearch selain type untuk suatu field dalam column, gunakan parameter other_params. Saat memperbarui mapping, parameter ini menjelaskan atribut Elasticsearch lain dari field tersebut.

 {
   "name": "guid",
   "other_params":
    {
       "doc_values": false
      },
    "type": "text"
  }

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.

  • true: Mempertahankan perilaku pemetaan otomatis Elasticsearch.

  • false: Nilai bawaan. Mapping Elasticsearch dihasilkan dan diperbarui berdasarkan konfigurasi kolom tugas sinkronisasi.

type bawaan di Elasticsearch 7.x adalah _doc. Jika menggunakan mapping otomatis, atur type ke _doc dan esVersion ke 7.

Anda harus beralih ke mode skrip dan menambahkan parameter versi: "esVersion": "7".

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:

  • index: Secara internal menggunakan Index.Builder dari SDK Elasticsearch untuk membuat permintaan batch. Saat menggunakan aksi index Elasticsearch untuk memasukkan dokumen, sistem terlebih dahulu memeriksa apakah ID ditentukan dalam data dokumen:

    • Jika tidak ada ID yang ditentukan, Elasticsearch menghasilkan ID unik dan menambahkan dokumen.

    • Jika ID ditentukan, Elasticsearch mengganti seluruh dokumen. Fitur ini tidak mendukung pembaruan hanya pada field tertentu.

      Catatan

      Operasi pembaruan ini berbeda dengan pembaruan parsial di Elasticsearch.

  • update: Memperbarui dokumen berdasarkan ID yang ditentukan pengguna. Jika ID tidak ada di index, dokumen baru dimasukkan. Jika ID ada, operasi memperbarui field column yang ditentukan dan membiarkan field dokumen lainnya tidak berubah. Setiap operasi update mengambil seluruh dokumen untuk memodifikasi field tertentu. Operasi update ini tidak mendukung filter kondisional dan hanya melakukan pembaruan berdasarkan ID yang ditentukan. Karena setiap pembaruan memerlukan pengambilan dokumen asli, operasi ini dapat berdampak signifikan pada kinerja.

    Catatan

    Jika Anda mengatur tipe aksi ke update, Anda harus mengonfigurasi parameter primaryKeyInfo.

Tidak

index

primaryKeyInfo

Menentukan cara menentukan kunci primer dokumen di Elasticsearch.

  • Business Primary Key (pk): Nilai _id diatur ke nilai field tertentu.

    "parameter":{
    "primaryKeyInfo":{
    "type":"pk",
    "column":["id"]}
    }
  • Composite Primary Key (specific): Nilai _id adalah gabungan nilai beberapa field, dipisahkan oleh delimiter yang ditentukan oleh Primary Key Delimiter.

    Catatan

    Nama field adalah field yang akan ditulis oleh writer. Di Antarmuka tanpa kode, Configure Primary Key Columns hanya mencantumkan field yang sudah ada di index Elasticsearch.

    "parameter":{
    "primaryKeyInfo":{
    "type":"specific",
    "fieldDelimiter":",",
    "column":["col1","col2"]}
    }
  • No Primary Key (nopk): _id dihasilkan secara otomatis oleh sistem saat data ditulis ke Elasticsearch.

    "primaryKeyInfo":{
    "type":"nopk"
    }

Ya

specific

esPartitionColumn

Menentukan apakah akan mengaktifkan penulisan terpartisi dengan mengatur parameter routing Elasticsearch.

  • Aktifkan partisi: Nilai kolom yang ditentukan digabungkan tanpa delimiter, dan hasilnya digunakan sebagai nilai routing. Saat menulis data, sistem memasukkan atau memperbarui dokumen di shard yang ditentukan. Jika Anda mengaktifkan partisi, Anda harus menentukan kolom partisi.

    {    "esPartitionColumn": [
            {
                "name":"col1",
                "comment":"xx",
                "type":"STRING"
                }
            ],
        }
  • Jika Anda tidak mengonfigurasi parameter ini, _id digunakan untuk routing secara bawaan, yang membantu mendistribusikan dokumen secara merata dan mencegah kesenjangan data.

Tidak

false

enableWriteNull

Menentukan apakah akan menulis field null dari sumber ke Elasticsearch. Nilai yang valid:

  • true: Menulis field null. Setelah sinkronisasi, nilai field yang sesuai di Elasticsearch adalah null.

  • false: Tidak menulis field null. Field tersebut tidak muncul dalam dokumen Elasticsearch.

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.

    Catatan

    Satu 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" dan col2="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 object atau nested.

  • Sintaks:

    • property

    • property.sub-property

    • property[0].sub-property

  • Konfigurasi editor kode:

    "multi":{
        "multi":true
    }
    Catatan

    Fitur 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):  null
    Catatan
    • Jika node leluhur dalam path berupa array, hasilnya adalah null. Misalnya, mengambil level1.level2.level3 menghasilkan null karena level2 adalah array. Untuk mengakses properti tersebut, Anda harus menentukan indeks, seperti level1.level2[0].level3 atau level1.level2[1].level3. Sintaks wildcard level1.level2[*].level3 tidak didukung.

    • Kunci yang mengandung titik (.) tidak didukung. Misalnya, jika datanya adalah {"level1.level2":{"level3":"testlevel3_1"}}, hasilnya adalah null.

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 key harus 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 hasil toString() setiap elemen.

  • Sintaks: property[].

    Menyertakan [] dalam nama kolom memicu operasi penghapusan duplikat dan penggabungan ini.

  • Konfigurasi editor kode:

    "multi":{
        "multi":true
    }
    Catatan

    Fitur 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, null dikembalikan.

  • Sintaks: property1|property2|...

    Menyertakan karakter pipa (|) dalam nama kolom memicu pemilihan multi-properti ini.

  • Konfigurasi editor kode:

    "multi":{    
        "multi":true
    }
    Catatan

    Fitur 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
    }
    Catatan

    Fitur 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.