全部产品
Search
文档中心

DataWorks:Sumber data Elasticsearch

更新时间:Oct 24, 2025

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.

Catatan

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 $ref di 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.

Catatan

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

Penting

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

    Skenario 2: Sinkronkan properti bidang bersarang atau objek

    Jika ada hubungan satu-ke-banyak, Anda dapat melintasi data dan membaginya menjadi tabel dan baris yang berbeda.

    property[*].sub-property

    Skenario 3: Pisahkan properti array menjadi beberapa baris

    Anda dapat menggabungkan isi larik string menjadi satu properti dan menghapus duplikat.

    property[]

    Skenario 4: Deduplikasi dan gabungkan properti array

    Anda dapat menggabungkan beberapa properti menjadi satu properti.

    property1,property2

    Skenario 5: Gabungkan dan sinkronkan beberapa properti

    Anda dapat memproses beberapa properti secara selektif.

    property1|property2

    Skenario 6: Sinkronkan beberapa properti secara selektif

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

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.

  • Jika Anda mengatur parameter ini ke nilai kecil, scroll mungkin kedaluwarsa jika waktu idle antara membaca dua halaman data terlalu lama. Hal ini dapat menyebabkan kehilangan data.

  • Jika Anda mengatur parameter ini ke nilai besar, kesalahan kueri data mungkin terjadi jika jumlah kueri bersamaan melebihi nilai parameter max_open_scroll_context di server.

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.

  • true: Terhubung ke node acak di kluster. Jika Anda mengaktifkan penemuan node, sistem memeriksa dan memperbarui daftar server di klien secara berkala dan mengirimkan permintaan kueri ke node yang ditemukan.

  • false: Kirim permintaan kueri ke titik akhir yang dikonfigurasi.

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: "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss". Konfigurasi ini harus mencakup semua format tipe bidang tanggal yang akan disinkronkan.

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: multi.key serta multi.mult. Untuk detail lebih lanjut tentang konfigurasi, lihat tabel di Fitur lanjutan.

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

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.

  • true: Sebelum data diimpor, indeks asli dihapus dan indeks dengan nama yang sama dibuat ulang. Operasi ini menghapus data di indeks.

  • false: Sebelum data diimpor, data yang ada di indeks dipertahankan.

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.

  • true: Terhubung ke node acak di kluster. Jika Anda mengaktifkan penemuan node, sistem memeriksa dan secara berkala memperbarui daftar server di klien.

  • false: Terhubung ke kluster Elasticsearch.

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.

  • Jika Anda mengatur aliasMode ke append, indeks saat ini ditambahkan ke pemetaan alias. Satu alias dapat sesuai dengan beberapa indeks.

  • Jika Anda mengatur aliasMode ke exclusive, alias pertama-tama dihapus, lalu indeks saat ini ditambahkan ke pemetaan alias. Satu alias sesuai dengan satu indeks.

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.

- id  // Tipe id sesuai dengan _id di Elasticsearch, yang dapat dipahami sebagai kunci utama unik. Saat menulis data, data dengan ID yang sama ditimpa 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

Berikut adalah deskripsi tipe kolom:

  • Jika tipe kolom adalah teks, Anda dapat mengonfigurasi parameter seperti analyzer, norms, dan index_options. Contoh berikut menunjukkan konfigurasi.

    {
        "name": "col_text",
        "type": "text",
        "analyzer": "ik_max_word"
        }
  • Jika tipe kolom adalah Date, Anda dapat mengonfigurasi salah satu dari dua metode berikut untuk mengurai data sumber. Pastikan metode konfigurasi konsisten.

    • Metode 1: Tulis langsung konten bidang yang dibaca oleh reader ke bidang data es:

      • Atur origin:true. Ini diperlukan. Hal ini memungkinkan konten bidang yang dibaca ditulis langsung ke data es.

      • Konfigurasikan "format". Ini menunjukkan bahwa ketika penulis es membuat pemetaan, properti format harus disetel untuk bidang ini. Contoh berikut menunjukkan konfigurasi:

          {
             "parameter":{
               "column":[{
                   "name": "col_date",
                   "type": "date",
                   "format": "yyyy-MM-dd HH:mm:ss",
                   "origin": true
                }]
           }
        }
    • Metode 2: (Konversi zona waktu) Jika Anda perlu melakukan konversi zona waktu di Data Integration, tambahkan parameter Timezone. Contoh berikut menunjukkan konfigurasi:

      Konfigurasi "format" yang telah disiapkan menunjukkan format waktu yang diuraikan oleh Data Integration selama konversi zona waktu:

        {
           "parameter" :{
             "column": [{
                "name": "col_date",
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss",
               "Timezone": "UTC"
             }]
         }
      }
  • Jika tipe kolom adalah geo_shape, Anda dapat mengonfigurasi properti seperti tree (geohash atau quadtree) dan precision. Contoh berikut menunjukkan konfigurasi.

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

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.

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

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.

  • true: Pertahankan pemetaan otomatis Elasticsearch.

  • false: Ini adalah nilai default. Jika Anda tidak menentukan parameter ini, nilainya adalah false. Pemetaan Elasticsearch dibuat dan diperbarui berdasarkan konfigurasi kolom tugas sinkronisasi.

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: "esVersion": "7".

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.

  • index: Index.Builder dari SDK Elasticsearch digunakan di lapisan bawah untuk membangun permintaan batch. Saat menyisipkan data dengan aksi index Elasticsearch, Anda harus terlebih dahulu menentukan apakah ID ditentukan dalam data dokumen yang akan disisipkan:

    • Jika tidak ada ID yang ditentukan, Elasticsearch secara default menghasilkan ID unik. Dalam hal ini, dokumen langsung ditambahkan ke Elasticsearch.

    • Jika ID ditentukan, seluruh dokumen diperbarui (diganti). Mengubah kolom tertentu tidak didukung.

      Catatan

      Pembaruan di sini tidak sama dengan pembaruan di Elasticsearch, yang menggantikan beberapa kolom tertentu.

  • update: Memperbarui dokumen berdasarkan ID yang ditentukan pengguna. Jika ID tidak ada di indeks, dokumen disisipkan. Jika ID ada, konten bidang kolom yang ditentukan diperbarui. Konten bidang dokumen lainnya tetap tidak berubah. Setiap operasi update mengambil seluruh informasi dokumen untuk memodifikasi bidang tertentu. Aksi update tidak mendukung penyaringan kondisional dan hanya memperbarui berdasarkan ID yang ditentukan. Karena setiap pembaruan memerlukan pengambilan dokumen asli, kinerja mungkin sangat terpengaruh.

    Catatan

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

Tidak

index

primaryKeyInfo

Menentukan metode untuk mendapatkan nilai kunci utama saat menulis ke Elasticsearch.

  • Business Primary Key (pk): Nilai _id disetel ke bidang tertentu.

    "parameter":{
    "primaryKeyInfo":{
    "type":"pk",
    "column":["id"]}
    }
  • Composite Primary Key (specific): Nilai _id adalah gabungan dari nilai beberapa bidang. Pemisahnya adalah nilai yang Anda atur untuk Primary Key Delimiter (fieldDelimiter).

    Catatan

    Nama bidang adalah bidang tujuan untuk penulis Elasticsearch. Di antarmuka tanpa kode, Primary Key Column Configuration hanya mencakup bidang yang sudah ada di indeks Elasticsearch.

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

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

Ya

specific

esPartitionColumn

Menentukan apakah akan mengaktifkan partisi saat menulis ke Elasticsearch. Ini digunakan untuk memodifikasi parameter routing di Elasticsearch.

  • Aktifkan partisi: Nilai kolom yang ditentukan digabungkan dengan string kosong sebagai pemisah dan disetel sebagai nilai routing. Saat menulis data, ini menyisipkan atau memperbarui dokumen di shard yang ditentukan. Jika Anda mengaktifkan partisi, Anda harus menentukan kolom kunci partisi.

    {    "esPartitionColumn": [
            {
                "name":"col1",
                "comment":"xx",
                "type":"STRING"
                }
            ],
        }
  • Nonaktifkan partisi: Jangan tentukan parameter ini. Secara default, _id digunakan sebagai kunci routing untuk mendistribusikan dokumen secara merata di beberapa shard untuk mencegah kesenjangan data.

Tidak

false

enableWriteNull

Menentukan apakah akan menyinkronkan bidang nilai null dari sumber ke Elasticsearch. Nilai valid:

  • true: Ya. Setelah disinkronkan, nilai bidang yang sesuai di Elasticsearch adalah null.

  • false: Tidak. Bidang nilai null dari sumber tidak disinkronkan ke Elasticsearch. Bidang tersebut tidak ditampilkan di Elasticsearch.

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.

    Catatan

    Tugas 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" dan col2="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
    }
    Catatan

    Konfigurasi 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):  null
    Catatan
    • Jika 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"
    }
    Catatan
    • Di 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
    }
    Catatan

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

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

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