全部产品
Search
文档中心

DataWorks:Sumber data Tablestore

更新时间:Oct 29, 2025

Tablestore adalah layanan penyimpanan data NoSQL yang dibangun di atas Sistem File Terdistribusi Apsara Alibaba Cloud. Sumber data Tablestore menyediakan saluran dua arah untuk membaca dan menulis data ke Tablestore. Topik ini menjelaskan kemampuan sinkronisasi data yang disediakan oleh DataWorks untuk Tablestore.

Batasan

  • Plugin Tablestore Reader dan Writer memungkinkan Anda membaca dan menulis data ke Tablestore. Plugin ini menyediakan dua metode akses data, mode baris dan mode kolom, untuk tabel lebar dan tabel deret waktu.

    • Mode kolom: Dalam model multi-versi Tablestore, data dalam tabel diorganisasikan dalam model tiga tingkat: Row > Column > Version. Sebuah baris dapat memiliki sejumlah kolom, dan nama kolom tidak tetap. Setiap kolom dapat memiliki beberapa versi, dengan setiap versi memiliki timestamp tertentu (nomor versi). Dalam mode kolom, data yang akan dibaca berada dalam format empat-tupel yang terdiri dari nilai kunci utama, nama kolom, timestamp, dan nilai kolom. Data yang akan ditulis juga berada dalam format empat-tupel yang terdiri dari nilai kunci utama, nama kolom, timestamp, dan nilai kolom.

    • Mode baris: Dalam mode ini, setiap catatan yang diperbarui diekspor sebagai baris dalam format (nilai kunci utama, nilai kolom).

      Dalam mode baris, setiap baris data sesuai dengan sebuah catatan dalam tabel Tablestore. Data yang ditulis dalam mode baris mencakup nilai kolom kunci utama dan nilai kolom atribut.

  • Kolom Tablestore terdiri dari kolom kunci utama (primaryKey) dan kolom atribut (column). Urutan kolom sumber harus sesuai dengan urutan kolom kunci utama dan kolom atribut dalam tabel Tablestore tujuan. Jika tidak, terjadi kesalahan pemetaan kolom.

  • Tablestore Reader membagi rentang data yang akan dibaca dari tabel menjadi N tugas, di mana N adalah tingkat konkurensi untuk sinkronisasi data. Setiap tugas dijalankan oleh thread Tablestore Reader.

Tipe bidang yang didukung

Tablestore Reader dan Tablestore Writer mendukung semua tipe data Tablestore. Tabel berikut mencantumkan pemetaan tipe data.

Kategori tipe

Tipe data Tablestore

Bilangan bulat

INTEGER

Bilangan titik mengambang

DOUBLE

String

STRING

Boolean

BOOLEAN

Biner

BINARY

Catatan
  • Tablestore tidak mendukung tipe tanggal. Lapisan aplikasi biasanya menggunakan tipe Long untuk menyimpan stempel waktu UNIX.

  • Anda harus mengonfigurasi data tipe INTEGER sebagai INT dalam editor kode. DataWorks kemudian mengubahnya menjadi tipe INTEGER. Jika Anda mengonfigurasi tipe sebagai INTEGER secara langsung, kesalahan dilaporkan dalam log dan tugas gagal.

Tambahkan sumber data

Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk dalam Manajemen Sumber Data. Anda dapat melihat tip informasi 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.

Panduan konfigurasi tugas sinkronisasi offline tabel tunggal

Lampiran I: Demo skrip Reader 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.

Demo skrip Reader

Konfigurasi pembacaan mode baris untuk tabel lebar

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "newVersion":"true",// Gunakan versi baru otsreader.
                "mode": "normal",// Baca data dalam mode baris.
                "isTimeseriesTable":"false",// Konfigurasikan tabel sebagai tabel lebar (bukan tabel deret waktu).
                "column":[// Bidang.
                    {
                        "name":"column1"// Nama bidang.
                    },
                    {
                        "name":"column2"
                    },
                    {
                        "name":"column3"
                    },
                    {
                        "name":"column4"
                    },
                    {
                        "name":"column5"
                    }
                ],
                "range":{
                    "split":[
                        {
                            "type":"STRING",
                            "value":"beginValue"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint1"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint2"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint3"
                        },
                        {
                            "type":"STRING",
                            "value":"endValue"
                        }
                    ],
                    "end":[
                        {
                            "type":"STRING",
                            "value":"endValue"
                        },
                        {
                            "type":"INT",
                            "value":"100"
                        },
                        {
                            "type":"INF_MAX"
                        },
                        {
                            "type":"INF_MAX"
                        }
                    ],
                    "begin":[
                        {
                            "type":"STRING",
                            "value":"beginValue"
                        },
                        {
                            "type":"INT",
                            "value":"0"
                        },
                        {
                            "type":"INF_MIN"
                        },
                        {
                            "type":"INF_MIN"
                        }
                    ]
                },
                "table":""// Nama tabel.
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah catatan kesalahan.
        },
        "speed":{
            "throttle":true,// false menunjukkan tanpa pembatasan kecepatan. Pembatasan kecepatan di bawah ini tidak berlaku. true menunjukkan pembatasan kecepatan.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Kecepatan pembatasan.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi pembacaan mode baris untuk tabel deret waktu

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table": "",// Nama tabel.
                // Untuk membaca data deret waktu, mode harus diatur ke normal.
                "mode": "normal",
                // Untuk membaca data deret waktu, newVersion harus diatur ke true.
                "newVersion": "true",
                // Konfigurasikan tabel sebagai tabel deret waktu.
                "isTimeseriesTable":"true",
                // measurementName: Nama pengukuran dari mana data deret waktu dibaca. Parameter ini opsional. Jika dibiarkan kosong, data dibaca dari seluruh tabel.
                "measurementName":"measurement_1",
                "column": [
                  {
                    "name": "_m_name"
                  },
                  {
                    "name": "tagA",
                    "is_timeseries_tag":"true"
                  },
                  {
                    "name": "double_0",
                    "type":"DOUBLE"
                  },
                  {
                    "name": "string_0",
                    "type":"STRING"
                  },
                  {
                    "name": "long_0",
                    "type":"INT"
                  },
                  {
                    "name": "binary_0",
                    "type":"BINARY"
                  },
                  {
                    "name": "bool_0",
                    "type":"BOOL"
                  },
                  {
                    "type":"STRING",
                    "value":"testString"
                  }
                ]
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah catatan kesalahan.
        },
        "speed":{
            "throttle":true,// false menunjukkan tanpa pembatasan kecepatan. Pembatasan kecepatan di bawah ini tidak berlaku. true menunjukkan pembatasan kecepatan.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Kecepatan pembatasan.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi pembacaan mode kolom untuk tabel lebar

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table":"",// Nama tabel.
                "newVersion":"true",// Versi baru otsreader.
                "mode": "multiversion",// Mode multi-versi.
                "column":[// Nama kolom yang akan diekspor. Mereka harus berupa kolom atribut.
                    {"name":"mobile"},
                    {"name":"name"},
                    {"name":"age"},
                    {"name":"salary"},
                    {"name":"marry"}
                ],
                "range":{// Rentang untuk diekspor.
                    "begin":[
                        {"type":"INF_MIN"},
                        {"type":"INF_MAX"}
                    ],
                    "end":[
                        {"type":"INF_MAX"},
                        {"type":"INF_MIN"}
                    ],
                    "split":[
                    ]
                },

            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah catatan kesalahan.
        },
        "speed":{
            "throttle":true,// false menunjukkan tanpa pembatasan kecepatan. Pembatasan kecepatan di bawah ini tidak berlaku. true menunjukkan pembatasan kecepatan.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Kecepatan pembatasan.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi parameter umum skrip Reader

Parameter

Deskripsi

Diperlukan

Nilai default

endpoint

Endpoint server Tablestore. Untuk informasi lebih lanjut, lihat Endpoints.

Ya

Tidak ada

accessId

ID AccessKey untuk Tablestore.

Ya

Tidak ada

accessKey

Rahasia AccessKey untuk Tablestore.

Ya

Tidak ada

instanceName

Nama instans Tablestore. Instans adalah entitas yang Anda gunakan untuk mengelola layanan Tablestore.

Setelah Anda mengaktifkan Tablestore, Anda harus membuat instans di konsol. Kemudian, Anda dapat membuat dan mengelola tabel dalam instans tersebut.

Instans adalah unit dasar untuk manajemen sumber daya di Tablestore. Kontrol akses dan pengukuran sumber daya untuk aplikasi dilakukan pada tingkat instans.

Ya

Tidak ada

table

Nama tabel dari mana data dibaca. Anda hanya dapat menentukan satu tabel. Tablestore tidak mendukung sinkronisasi beberapa tabel.

Ya

Tidak ada

newVersion

Versi plugin Tablestore Reader yang digunakan.

  • false: Menggunakan Tablestore Reader lama, yang hanya mendukung mode baris untuk membaca tabel lebar.

  • true: Versi baru Tablestore Reader mendukung mode baris, mode kolom, tabel deret waktu, dan tabel lebar.

Versi baru Tablestore Reader mendukung fitur baru dan mengonsumsi lebih sedikit sumber daya sistem. Kami merekomendasikan agar Anda menggunakan versi baru Tablestore Reader.

Plugin baru kompatibel dengan konfigurasi plugin lama. Ini berarti tugas lama dapat berjalan seperti yang diharapkan setelah Anda menambahkan konfigurasi newVersion=true.

Tidak

false

mode

Mode untuk membaca data. Mode berikut didukung:

  • normal: Membaca data dalam mode baris. Format data adalah {nilai kolom kunci utama, nilai kolom atribut}.

  • multiVersion: Membaca data dalam mode kolom. Format data adalah {kolom kunci utama, nama kolom atribut, timestamp, nilai kolom atribut}.

Parameter ini berlaku hanya ketika newVersion:true dikonfigurasikan.

Versi lama Tablestore Reader mengabaikan konfigurasi mode dan hanya mendukung mode baris.

Tidak

normal

isTimeseriesTable

Menentukan apakah tabel data adalah tabel data deret waktu.

  • false: Tabel data adalah tabel lebar normal.

  • true: Tabel data adalah tabel data deret waktu.

Parameter ini berlaku hanya ketika newVersion:true & mode:normal dikonfigurasikan.

Versi lama Tablestore Reader tidak mendukung tabel deret waktu. Tabel deret waktu tidak dapat dibaca dalam mode kolom.

Tidak

false

Konfigurasi parameter tambahan skrip Reader

Tablestore Reader mendukung pembacaan dari tabel lebar dalam mode baris, pembacaan dari tabel deret waktu dalam mode baris, dan pembacaan dari tabel lebar dalam mode kolom. Bagian berikut menjelaskan konfigurasi tambahan untuk setiap mode.

Parameter pembacaan mode baris untuk tabel lebar

Parameter

Deskripsi

Diperlukan

Nilai default

column

Himpunan nama kolom yang akan disinkronkan dari tabel yang dikonfigurasi. Gunakan array JSON untuk menggambarkan informasi bidang. Karena Tablestore adalah sistem NoSQL, Anda harus menentukan nama bidang saat Tablestore Reader membaca data.

  • Mendukung pembacaan kolom normal, seperti {"name":"col1"}.

  • Mendukung pembacaan subset kolom. Jika Anda tidak mengonfigurasi kolom, Tablestore Reader tidak membacanya.

  • Mendukung pembacaan kolom konstan, seperti {"type":"STRING", "value":"DataX"}. Gunakan `type` untuk menggambarkan jenis konstanta. Jenis yang didukung adalah String, Int, Double, Bool, Binary (gunakan pengkodean Base64), INF_MIN (nilai minimum sistem yang ditentukan di Tablestore; jika Anda menggunakan nilai ini, jangan tentukan properti `value`, atau kesalahan terjadi), dan INF_MAX (nilai maksimum sistem yang ditentukan di Tablestore; jika Anda menggunakan nilai ini, jangan tentukan properti `value`, atau kesalahan terjadi).

  • Tidak mendukung fungsi atau ekspresi kustom. Karena Tablestore tidak menyediakan fungsi atau ekspresi SQL-like, Tablestore Reader tidak dapat menyediakan fitur kolom fungsi atau ekspresi.

Ya

Tidak ada

begin dan end

Parameter begin dan end menentukan rentang data yang akan dibaca dari tabel Tablestore.

begin dan end menggambarkan distribusi interval kunci utama Tablestore. Untuk interval tak terbatas, Anda dapat menggunakan {"type":"INF_MIN"} dan {"type":"INF_MAX"} untuk mewakili begin dan end, masing-masing. type menunjukkan tipe data yang akan dibaca.

Catatan
  • Nilai default untuk parameter begin dan end adalah [INF_MIN, INF_MAX), yang berarti semua data dibaca.

  • Ketika jumlah nilai begin dan end yang dikonfigurasi kurang dari jumlah kunci utama, menurut prinsip pencocokan kunci utama paling kiri, rentang untuk kunci utama yang tidakdikonfigurasi default ke [INF_MIN, INF_MAX).

  • Jika Anda hanya mengonfigurasi begin atau end, rentang datanya adalah [begin, INF_MAX) atau [INF_MIN, end).

  • Jika hanya ada satu kolom kunci utama, konfigurasi begin dan end mengikuti interval tertutup di kiri dan terbuka di kanan.

  • Jika ada beberapa kolom kunci utama, kolom kunci utama terakhir mengikuti interval tertutup di kiri dan terbuka di kanan. Kolom kunci utama lainnya mengikuti interval tertutup.

Sebagai contoh, pertimbangkan membaca data dari tabel Tablestore dengan tiga kolom kunci utama: [Ratusan, Puluhan, Satuan]. Tabel tersebut berisi 1.000 kolom dengan kunci utama dari (0,0,0), (0,0,1), ... hingga (9,9,8), (9,9,9). Parameter begin dan end dikonfigurasikan sebagai berikut.

  • Contoh 1: Baca data di mana Ratusan berada dalam rentang [3, 5] dan Puluhan berada dalam rentang [4, 6]. Kunci utama data yang dibaca termasuk (3,4,0), (3,4,1), ..., (4,4,0), (4,0,1), ..., (5,6,8), (5,6,9). Konfigurasinya adalah sebagai berikut:

    "range": {
          "begin": [
            {"type":"INT", "value":"3"},  // Tentukan nilai minimum Ratusan untuk dibaca.
            {"type":"INT", "value":"4"}  // Tentukan nilai minimum Puluhan untuk dibaca.
          ],
          "end": [
            {"type":"INT", "value":"5"}, // Tentukan nilai maksimum Ratusan untuk dibaca.
            {"type":"INT", "value":"6"} // Tentukan nilai maksimum Puluhan untuk dibaca.
          ]
        }
  • Contoh 2: Baca data di mana Ratusan berada dalam rentang [3, 5], Puluhan berada dalam rentang [4, 6], dan Satuan berada dalam rentang [5, 7). Kunci utama data yang dibaca termasuk (3,4,5), (3,4,6), ..., (4,4,5), (4,4,6), ..., (5,6,5), (5,6,6). Konfigurasinya adalah sebagai berikut:

    "range": {
          "begin": [
            {"type":"INT", "value":"3"},  // Tentukan nilai minimum Ratusan untuk dibaca.
            {"type":"INT", "value":"4"},  // Tentukan nilai minimum Puluhan untuk dibaca.
            {"type":"INT", "value":"5"}  // Tentukan nilai minimum Satuan untuk dibaca.
          ],
          "end": [
            {"type":"INT", "value":"5"}, // Tentukan nilai maksimum Ratusan untuk dibaca.
            {"type":"INT", "value":"6"}, // Tentukan nilai maksimum Puluhan untuk dibaca.
            {"type":"INT", "value":"7"}  // Tentukan nilai maksimum Satuan untuk dibaca.
          ]
        }

Tidak

(INF_MIN, INF_MAX)

split

Ini adalah item konfigurasi lanjutan. Kami tidak merekomendasikan menggunakannya dalam kasus normal.

Anda dapat mengonfigurasi parameter split untuk menentukan rentang data untuk sharding. Anda dapat menggunakan aturan pemisahan kustom jika terjadi hot spot dalam penyimpanan data Tablestore. Perhatikan konfigurasi tugas berikut sebagai contoh:

{
  "range": {
    "begin": [{"type": "INF_MIN"}],
    "end":   [{"type": "INF_MAX"}],
    "split": [
      {"type": "STRING","value": "1"},
      {"type": "STRING","value": "2"},
      {"type": "STRING","value": "3"},
      {"type": "STRING","value": "4"},
      {"type": "STRING","value": "5"}
    ]
  }

Saat tugas berjalan, data dibagi menjadi enam segmen dan dibaca secara bersamaan. Kami merekomendasikan agar jumlah segmen lebih besar dari konkurensi tugas.

// Segmen 1
[minimum value, 1)
// Segmen 2
[1, 2)
// Segmen 3
[2, 3)
// Segmen 4
[3, 4)
// Segmen 5
[4, 5)
// Segmen 6
[5, maximum value)

Tidak

Jika parameter split tidak dikonfigurasikan, logika pemisahan otomatis digunakan.

Logika pemisahan otomatis menemukan nilai maksimum dan minimum kunci partisi dan membagi data menjadi segmen genap.

Kunci partisi mendukung tipe integer dan string. Tipe integer dibagi dengan pembagian integer. Tipe string dibagi berdasarkan kode Unicode karakter pertama.

Parameter pembacaan mode baris untuk tabel deret waktu

Parameter

Deskripsi

Diperlukan

Nilai default

column

column adalah array. Setiap elemen mewakili sebuah kolom. Anda dapat mengonfigurasi kolom konstan dan kolom normal.

Untuk kolom konstan, konfigurasikan bidang berikut:

  • type: Jenis nilai bidang. Parameter ini diperlukan. Jenis yang didukung adalah string, int, double, bool, dan binary.

  • value: Nilai bidang. Parameter ini diperlukan.

Untuk kolom normal, konfigurasikan bidang berikut:

  • name: Nama kolom. Parameter ini diperlukan. Bidang berikut telah ditentukan sebelumnya.

    • Nama 'pengukuran' dari timeline diidentifikasi oleh _m_name. Tipe data adalah String.

    • Sumber data timeline diidentifikasi oleh _data_source. Tipe data adalah String.

    • Tag timeline diidentifikasi oleh _tags. Tipe data adalah String.

    • Timestamp timeline diidentifikasi oleh _time. Tipe data adalah Long.

  • is_timeseries_tag: Menentukan apakah kolom adalah pasangan kunci-nilai dalam bidang tag. Parameter ini opsional. Nilai defaultnya adalah false.

  • type: Jenis nilai bidang. Parameter ini opsional. Nilai defaultnya adalah string. Jenis yang didukung adalah string, int, double, bool, dan binary.

Skrip berikut adalah contoh membaca empat kolom data:

"column": [
  {
    "name": "_m_name"               // Bidang nama pengukuran dari timeline.
  },
  {
    "name": "tag_key",                // Nilai yang sesuai dengan tag_key dalam bidang tags dari timeline.
    "is_timeseries_tag":"true"
  },
  {
    "name": "string_column",        // Kolom bernama string_column dalam bidang.
    "type":"string"                    // Tipe data adalah string.
  },
  {
    "value": "constant_value",        // Kolom konstan. Nilainya tetap pada "constant_value".
    "type":"string"
  }
],

Ya

Tidak ada

measurementName

Nama pengukuran timeline yang akan dibaca. Jika Anda tidak mengonfigurasi parameter ini, data dibaca dari seluruh tabel.

Tidak

Tidak ada

timeRange

Rentang waktu data yang diminta. Rentang baca adalah [begin,end), yang merupakan interval tertutup di kiri dan terbuka di kanan. `begin` harus kurang dari `end`. Unit timestamp adalah mikrodetik. Formatnya adalah sebagai berikut:

"timeRange":{
    // begin: Opsional. Nilai default: 0. Rentang nilai: 0 hingga LONG_MAX.
    "begin":1400000000000,
    // end: Opsional. Nilai default: Long Max (9223372036854775807L). Rentang nilai: 0 hingga LONG_MAX.
    "end"  :1600000000000
},

Tidak

Semua versi

Parameter pembacaan mode kolom untuk tabel lebar

Parameter

Deskripsi

Diperlukan

Nilai default

column

Menentukan kolom yang akan diekspor. Hanya kolom atribut yang didukung dalam mode kolom.

Format:

"column": [
    {"name1":"{your column name1}"},
    {"name2":"{your column name2}"}
],
Catatan
  • Kolom konstan tidak didukung dalam mode kolom.

  • Anda tidak dapat menentukan kolom kunci utama. Tupel 4-elemen yang diekspor mencakup kunci utama lengkap secara default.

  • Anda tidak dapat menentukan kolom yang sama beberapa kali.

Ya

Semua kolom

range

Rentang data yang akan dibaca. Rentang baca adalah [begin, end), yang merupakan interval tertutup di kiri dan terbuka di kanan. Selain itu:

  • Jika `begin` kurang dari `end`, data dibaca dalam urutan menaik.

  • Jika `begin` lebih besar dari `end`, data dibaca dalam urutan menurun.

  • `begin` dan `end` tidak boleh sama.

Jenis yang didukung untuk `type` adalah:

  • string

  • int

  • binary: Inputnya adalah string Base64 dari data biner.

  • INF_MIN: Mewakili negatif tak terhingga.

  • INF_MAX: Mewakili positif tak terhingga.

Format:

"range":{
    // Opsional. Secara default, pembacaan dimulai dari negatif tak terhingga.
    // Nilainya bisa berupa array kosong, awalan kunci utama, atau kunci utama lengkap. Saat membaca dalam urutan menaik, akhiran kunci utama default ke INF_MIN. Saat membaca dalam urutan menurun, default ke INF_MAX.
    // Contoh:
    // Jika tabel Anda memiliki dua kolom kunci utama bertipe string dan int, tiga input berikut valid:
    // 1. Baca dari awal tabel hingga akhir tabel:
    // "begin":[],"end":[],
    // 2. Mulai membaca dari nilai minimum kunci utama kedua di mana nilai kunci utama pertama adalah "a". Berhenti membaca pada nilai maksimum kunci utama kedua di mana nilai kunci utama pertama adalah "b":
    // "begin":[{"type":"string", "value":"a"}],"end":[{"type":"string", "value":"b"}],
    // 3. Mulai membaca dari nilai minimum kunci utama kedua di mana nilai kunci utama pertama adalah "a". Berhenti membaca di akhir tabel:
    // "begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],"end":[],    
    //
    // Tipe biner untuk kolom kunci utama bersifat khusus. Karena JSON tidak mendukung input biner secara langsung, sistem mengharuskan Anda
    // gunakan metode (Java) Base64.encodeBase64String untuk mengonversi data biner menjadi string yang terlihat, lalu masukkan string ini ke dalam value.
    // Contoh (Java):
    //   byte[] bytes = "hello".getBytes();  // Buat data biner, di sini menggunakan nilai byte dari string "hello".
    //   String inputValue = Base64.encodeBase64String(bytes) // Panggil metode Base64 untuk mengonversi data biner menjadi string yang terlihat.
    //   Setelah kode di atas dijalankan, inputValue adalah "aGVsbG8=".
    //   Konfigurasi akhir adalah: {"type":"binary","value" : "aGVsbG8="}

    "begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],

    // Secara default, pembacaan berhenti pada positif tak terhingga.
    // Nilainya bisa berupa array kosong, awalan kunci utama, atau kunci utama lengkap. Saat membaca dalam urutan menaik, akhiran kunci utama default ke INF_MAX. Saat membaca dalam urutan menurun, default ke INF_MIN.
    // Opsional.
    "end":[{"type":"string", "value":"g"},{"type":"INF_MAX"}],

    // Saat Anda memiliki sejumlah besar data, Anda perlu mengaktifkan ekspor bersamaan. Split dapat membagi data dalam rentang saat ini menjadi beberapa tugas bersamaan berdasarkan titik pemisah.
    // Opsional.
    //   1. Nilai input dalam split hanya bisa menjadi kolom pertama dari kunci utama (kunci partisi), dan tipenya harus sama dengan kunci partisi.
    //   2. Nilainya harus berada di antara begin dan end.
    //   3. Nilai dalam split harus dalam urutan menaik atau menurun, sesuai dengan urutan begin dan end.
    "split":[{"type":"string", "value":"b"}, {"type":"string", "value":"c"}]
},

Tidak

Semua data

timeRange

Rentang waktu data yang diminta. Rentang baca adalah [begin, end), yang merupakan interval tertutup di kiri dan terbuka di kanan. `begin` harus kurang dari `end`. Unit timestamp adalah mikrodetik.

Format:

"timeRange":{
    // begin: Opsional. Nilai default: 0. Rentang nilai: 0 hingga LONG_MAX.
    "begin":1400000000000,
    // end: Opsional. Nilai default: Long Max (9223372036854775807L). Rentang nilai: 0 hingga LONG_MAX.
    "end"  :1600000000000
},

Tidak

Semua versi

maxVersion

Jumlah maksimum versi data yang diminta. Rentang nilai adalah 1 hingga INT32_MAX.

Tidak

Semua versi

Lampiran II: Demo skrip Writer 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.

Demo skrip Writer

Konfigurasi penulisan mode baris untuk tabel lebar

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table":"",// Nama tabel.
                "newVersion":"true",// Gunakan versi baru otswriter.
                "mode": "normal",// Tulis data dalam mode baris.
                "isTimeseriesTable":"false",// Konfigurasikan tabel sebagai tabel lebar (bukan tabel deret waktu).
                "primaryKey" : [// Informasi kunci utama Tablestore.
                    {"name":"gid", "type":"INT"},
                    {"name":"uid", "type":"STRING"}
                 ],
                "column" : [// Bidang.
                      {"name":"col1", "type":"INT"},
                      {"name":"col2", "type":"DOUBLE"},
                      {"name":"col3", "type":"STRING"},
                      {"name":"col4", "type":"STRING"},
                      {"name":"col5", "type":"BOOL"}
                  ],
                "writeMode" : "PutRow"    // Mode penulisan.
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah catatan kesalahan.
        },
        "speed":{
            "throttle":true,// Saat throttle adalah false, parameter mbps tidak berlaku, menunjukkan tanpa pembatasan kecepatan. Saat throttle adalah true, itu menunjukkan pembatasan kecepatan.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Kecepatan pembatasan. 1 mbps = 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi penulisan mode baris untuk tabel deret waktu

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table": "testTimeseriesTableName01",
                "mode": "normal",
                "newVersion": "true",
                "isTimeseriesTable":"true",
                "timeunit":"microseconds",
                "column": [
                      {
                        "name": "_m_name"
                      },
                      {
                        "name": "_data_source",
                      },
                      {
                        "name": "_tags",
                      },
                      {
                        "name": "_time",
                      },
                      {
                        "name": "string_1",
                        "type":"string"
                      },
                      {
                        "name":"tag3",
                        "is_timeseries_tag":"true",
                      }
                    ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah catatan kesalahan.
        },
        "speed":{
            "throttle":true,// Saat throttle adalah false, parameter mbps tidak berlaku, menunjukkan tanpa pembatasan kecepatan. Saat throttle adalah true, itu menunjukkan pembatasan kecepatan.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Kecepatan pembatasan. 1 mbps = 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi penulisan mode kolom untuk tabel lebar

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table":"",
                "newVersion":"true",
                "mode":"multiVersion",
                "primaryKey" : [
                    "gid",
                    "uid"
                    ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah catatan kesalahan.
        },
        "speed":{
            "throttle":true,// Saat throttle adalah false, parameter mbps tidak berlaku, menunjukkan tanpa pembatasan kecepatan. Saat throttle adalah true, itu menunjukkan pembatasan kecepatan.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Kecepatan pembatasan. 1 mbps = 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi parameter umum skrip Writer

Parameter

Deskripsi

Diperlukan

Nilai default

datasource

Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan.

Ya

Tidak ada

endPoint

Endpoint server Tablestore. Untuk informasi lebih lanjut, lihat Endpoints.

Ya

Tidak ada

accessId

ID AccessKey untuk Tablestore.

Ya

Tidak ada

accessKey

Rahasia AccessKey untuk Tablestore.

Ya

Tidak ada

instanceName

Nama instans Tablestore. Instans adalah entitas yang Anda gunakan untuk mengelola layanan Tablestore.

Setelah Anda mengaktifkan Tablestore, Anda harus membuat instans di konsol. Kemudian, Anda dapat membuat dan mengelola tabel dalam instans tersebut. Instans adalah unit dasar untuk manajemen sumber daya di Tablestore. Kontrol akses dan pengukuran sumber daya untuk aplikasi dilakukan pada tingkat instans.

Ya

Tidak ada

table

Nama tabel tempat data akan ditulis. Anda hanya dapat menentukan satu tabel. Tablestore tidak mendukung sinkronisasi beberapa tabel.

Ya

Tidak ada

newVersion

Versi plugin Tablestore Writer yang digunakan.

  • false: Versi lama Tablestore Writer. Mendukung hanya penulisan ke tabel lebar dalam mode baris.

  • true: Versi baru Tablestore Writer, yang mendukung mode baris, mode kolom, tabel deret waktu, tabel lebar, dan fitur kolom kunci utama auto-increment.

Versi baru Tablestore Writer mendukung fitur baru dan mengonsumsi lebih sedikit sumber daya sistem. Kami merekomendasikan agar Anda menggunakan versi baru Tablestore Writer.

Plugin baru kompatibel dengan konfigurasi plugin lama. Ini berarti tugas lama dapat berjalan seperti yang diharapkan setelah Anda menambahkan konfigurasi newVersion=true.

Ya

false

mode

Mode untuk menulis data. Dua mode berikut didukung:

  • normal: Menulis data dalam format normal (mode baris).

  • multiVersion: Menulis data dalam format multi-versi (mode kolom).

Parameter ini berlaku hanya ketika newVersion:true dikonfigurasikan.

Versi lama Tablestore Writer mengabaikan konfigurasi mode dan hanya mendukung mode baris.

Tidak

normal

isTimeseriesTable

Menentukan apakah tabel data adalah tabel data deret waktu.

  • false: Tabel data adalah tabel lebar normal.

  • true: Tabel data adalah tabel data deret waktu.

Parameter ini berlaku hanya ketika newVersion:true & mode:normal dikonfigurasikan. Mode kolom tidak kompatibel dengan tabel deret waktu.

Tidak

false

Konfigurasi parameter tambahan skrip Writer

Tablestore Writer mendukung penulisan ke tabel lebar dalam mode baris, penulisan ke tabel deret waktu dalam mode baris, dan penulisan ke tabel lebar dalam mode kolom. Bagian berikut menjelaskan konfigurasi tambahan untuk setiap mode.

Parameter penulisan mode baris untuk tabel lebar

Parameter

Deskripsi

Diperlukan

Nilai default

primaryKey

Informasi kunci utama Tablestore. Gunakan array JSON untuk menggambarkan informasi bidang. Karena Tablestore adalah sistem NoSQL, Anda harus menentukan nama bidang saat Tablestore Writer mengimpor data.

Sistem sinkronisasi data mendukung konversi tipe. Oleh karena itu, jika data sumber bukan bertipe STRING atau INT, Tablestore Writer melakukan konversi tipe data. Kode berikut memberikan contoh konfigurasi.

"primaryKey" : [
    {"name":"gid", "type":"INT"},
    {"name":"uid", "type":"STRING"}
                 ],
Catatan

Kunci utama di Tablestore hanya mendukung tipe STRING dan INT. Oleh karena itu, Tablestore Writer juga membatasi tipe menjadi STRING dan INT.

Ya

Tidak ada

column

Himpunan nama kolom yang akan disinkronkan dalam tabel yang dikonfigurasi. Gunakan array JSON untuk menggambarkan informasi bidang.

Contoh konfigurasi:

"column" : [
     {"name":"col1", "type":"INT"},
     {"name":"col2", "type":"DOUBLE"},
     {"name":"col3", "type":"STRING"},
     {"name":"col4", "type":"BINARY"},
     {"name":"col5", "type":"BOOL"}
              ],

`name` adalah nama kolom Tablestore yang akan ditulis, dan `type` adalah tipe yang akan ditulis. Tablestore mendukung tipe STRING, INT, DOUBLE, BOOL, dan BINARY.

Catatan

Konstanta, fungsi, atau ekspresi kustom tidak didukung selama proses penulisan.

Ya

Tidak ada

writeMode

Mode untuk menulis data ke Tablestore. Dua mode berikut didukung:

  • PutRow: Sesuai dengan API PutRow Tablestore. Ini menyisipkan data ke baris tertentu. Jika baris tidak ada, baris baru ditambahkan. Jika baris ada, baris asli ditimpa.

  • UpdateRow: Sesuai dengan API UpdateRow Tablestore. Ini memperbarui data dalam baris tertentu. Jika baris tidak ada, baris baru ditambahkan. Jika baris ada, nilai kolom tertentu dalam baris ini ditambahkan, dimodifikasi, atau dihapus berdasarkan konten permintaan.

Ya

Tidak ada

enableAutoIncrement

Menentukan apakah mengizinkan penulisan data ke tabel Tablestore yang berisi kolom kunci utama auto-increment.

  • true: Plugin secara otomatis memindai informasi kolom auto-increment dari tabel tujuan dan menambahkan kolom auto-increment saat menulis data. Anda tidak perlu mengonfigurasi nama kolom auto-increment.

  • false: Kesalahan dilaporkan saat menulis ke tabel dengan kolom kunci utama auto-increment.

Tidak

false

requestTotalSizeLimitation

Parameter ini membatasi ukuran satu baris data saat menulis ke Tablestore. Jenis konfigurasi adalah numerik.

Tidak

1 MB

attributeColumnSizeLimitation

Parameter ini membatasi ukuran satu kolom atribut saat menulis ke Tablestore. Jenis konfigurasi adalah numerik.

Tidak

2 MB

primaryKeyColumnSizeLimitation

Parameter ini membatasi ukuran satu kolom kunci utama saat menulis ke Tablestore. Jenis konfigurasi adalah numerik.

Tidak

1 KB

attributeColumnMaxCount

Parameter ini membatasi jumlah kolom atribut saat menulis ke Tablestore. Jenis konfigurasi adalah numerik.

Tidak

1.024

Parameter penulisan mode baris untuk tabel deret waktu

Parameter

Deskripsi

Diperlukan

Nilai default

column

Setiap elemen dalam `column` sesuai dengan sebuah bidang dalam data deret waktu. Anda dapat mengonfigurasi parameter berikut untuk setiap elemen.

  • name: Nama kolom. Parameter ini diperlukan. Bidang berikut telah ditentukan sebelumnya:

    • Nama 'pengukuran' dari timeline diidentifikasi oleh _m_name. Tipe data adalah String.

    • Sumber data timeline diidentifikasi oleh _data_source. Tipe data adalah String.

    • Tag timeline diidentifikasi oleh _tags. Tipe data adalah String. Format string adalah ["tagKey1=value1","tagKey2=value2"].

    • Timestamp timeline diidentifikasi oleh _time. Tipe data adalah Long. Unit default adalah mikrodetik.

  • is_timeseries_tag: Menentukan apakah kolom adalah pasangan kunci-nilai dalam bidang tag. Parameter ini opsional. Nilai defaultnya adalah false.

  • type: Jenis nilai bidang. Parameter ini opsional. Nilai defaultnya adalah string. Jenis yang didukung adalah string, int, double, bool, dan binary.

Karena nama pengukuran dan timestamp data deret waktu tidak boleh kosong, Anda harus mengonfigurasi bidang _m_name dan _time.

Contoh: Sebuah catatan yang akan ditulis berisi enam bidang berikut:

mName1    source1    ["tag1=A","tag2=B"]    1677763080000000    field_value     C

Gunakan konfigurasi berikut:

"column": [
      {
        "name": "_m_name"
      },
      {
        "name": "_data_source",
      },
      {
        "name": "_tags",
      },
      {
        "name": "_time",
      },
      {
        "name": "string_1",
        "type":"string"
      },
      {
        "name":"tag3",
        "is_timeseries_tag":"true",
      }
    ],

Ya

Tidak ada

timeunit

Unit bidang timestamp `_time` yang dikonfigurasikan. Unit yang didukung adalah NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, dan MINUTES.

Tidak

MICROSECONDS

Parameter penulisan mode kolom untuk tabel lebar

Parameter

Deskripsi

Diperlukan

Nilai default

primaryKey

Kolom kunci utama tabel.

Untuk mengurangi biaya konfigurasi, Anda tidak perlu mengonfigurasi posisi primaryKey dalam Record (Baris). Namun, format Record harus tetap: primaryKey harus berada di awal record, dan primaryKey harus diikuti oleh columnName. Format record adalah: {pk0,pk1...}, {columnName}, {timestamp}, {value}.

Sebagai contoh, anggap Anda memiliki sembilan record berikut:

1,pk1,row1,1677699863871,value_0_0
1,pk1,row2,1677699863871,value_0_1
1,pk1,row3,1677699863871,value_0_2
2,pk2,row1,1677699863871,value_1_0
2,pk2,row2,1677699863871,value_1_1
2,pk2,row3,1677699863871,value_1_2
3,pk3,row1,1677699863871,value_2_0
3,pk3,row2,1677699863871,value_2_1
3,pk3,row3,1677699863871,value_2_2

Contoh konfigurasi:

"primaryKey" : [
    "gid",
    "uid"
    ],

Hasil penulisan ke tabel lebar:

gid     uid     row1        row2        row3
1        pk1        value_0_0    value_0_1    value_0_2
2        pk2        value_1_0    value_1_1    value_1_2
3        pk3        value_2_0    value_2_1    value_2_2

Ya

Tidak ada

columnNamePrefixFilter

Filter awalan nama kolom.

Untuk data yang diimpor dari Hbase, cf dan qulifier bersama-sama membentuk columnName. Namun, Tablestore tidak mendukung cf, jadi Anda perlu menyaring cf.

Contoh konfigurasi: "columnNamePrefixFilter":"cf:"

Catatan
  • Parameter ini opsional. Jika tidak ditentukan atau nilainya adalah string kosong, nama kolom tidak disaring.

  • Jika columnName dari data yang ditambahkan melalui Data Integration tidak dimulai dengan awalan, record dikirim ke kolektor data kotor.

Tidak

Tidak ada

FAQ

  • T: Bagaimana cara mengonfigurasi Tablestore Writer untuk menulis data ke tabel tujuan yang berisi kolom kunci utama auto-increment?

    1. Konfigurasi Tablestore Writer harus mencakup dua baris berikut:

      "newVersion": "true",
      "enableAutoIncrement": "true",
    2. Anda tidak perlu mengonfigurasi nama kolom kunci utama auto-increment dalam Tablestore Writer.

    3. Dalam Tablestore Writer, jumlah entri primaryKey ditambah jumlah entri column harus sama dengan jumlah kolom dalam data Tablestore Reader upstream.

  • T: Dalam konfigurasi model deret waktu, apa perbedaan antara bidang _tag dan is_timeseries_tag ?

    Contoh: Sebuah catatan memiliki tiga tag: [Phone=Xiaomi, Memory=8G, Camera=Leica].数据

    • Contoh Ekspor Data (Tablestore Reader)

      • Jika ingin menggabungkan tag di atas dan mengekspornya sebagai satu kolom, gunakan konfigurasi berikut:

        "column": [
              {
                "name": "_tags",
              }
            ],

        DataWorks mengekspor tag sebagai satu kolom data, dalam format berikut:

        ["phone=xiaomi","camera=LEICA","RAM=8G"]
      • Jika ingin mengekspor phone dan camera sebagai kolom terpisah, gunakan konfigurasi berikut:

        "column": [
              {
                "name": "phone",
                "is_timeseries_tag":"true",
              },
              {
                "name": "camera",
                "is_timeseries_tag":"true",
              }
            ],

        DataWorks mengekspor dua kolom data, dalam format berikut:

        xiaomi, LEICA
    • Contoh Impor Data (Tablestore Writer)

      Asumsikan sumber data upstream (Reader) memiliki dua kolom data:

      • Satu kolom data adalah: ["phone=xiaomi","camera=LEICA","RAM=8G"].

      • Kolom data lainnya adalah: 6499.

      Anda ingin menambahkan kedua kolom tersebut ke tag. Format bidang tag yang diharapkan setelah penulisan adalah sebagai berikut:格式Gunakan konfigurasi berikut:

      "column": [
            {
              "name": "_tags",
            },
            {
              "name": "price",
              "is_timeseries_tag":"true",
            },
          ],
      • Konfigurasi kolom pertama mengimpor ["phone=xiaomi","camera=LEICA","RAM=8G"] secara keseluruhan ke dalam bidang tag.

      • Konfigurasi kolom kedua mengimpor price=6499 secara terpisah ke dalam bidang tag.