All Products
Search
Document Center

DataWorks:Sumber data Tablestore

Last Updated:Jun 18, 2026

Tablestore adalah layanan penyimpanan NoSQL yang dibangun di atas Alibaba Cloud Apsara Distributed File System. Sumber data Tablestore di DataWorks memungkinkan sinkronisasi data dua arah.

Batasan

  • Plugin Tablestore Reader dan Writer membaca dari dan menulis ke Tablestore. Plugin ini beroperasi pada tabel lebar (wide-column) dan tabel deret waktu (time-series) dalam dua mode: row mode dan column mode.

    • column mode: Dalam model multi-versi Tablestore, data diorganisasi dalam struktur tiga tingkat: row > Column > Version. Satu baris dapat memiliki sejumlah kolom apa pun, dan nama kolom tidak tetap. Setiap kolom dapat memiliki beberapa versi, dengan setiap versi memiliki timestamp tertentu yang juga berfungsi sebagai nomor versi. Dalam column mode, data diekspor dan diimpor sebagai tupel empat elemen: (nilai kunci primer, nama kolom, timestamp, nilai kolom).

    • row mode: Mode ini mengekspor setiap catatan yang diperbarui sebagai satu baris dalam format (nilai kunci primer, nilai kolom).

      Dalam row mode, setiap baris data sesuai dengan satu baris tunggal di tabel Tablestore dan mencakup nilai untuk kolom kunci primer maupun kolom atribut.

  • Kolom Tablestore terdiri dari kolom kunci primerprimaryKey dan kolom atributcolumn. Urutan kolom sumber harus konsisten dengan urutan kolom kunci primer dan kolom atribut di Tablestore tujuan; jika tidak, akan terjadi error pemetaan kolom.

  • Tablestore Reader membagi rentang data tabel menjadi N tugas berdasarkan tingkat konkurensi yang ditentukan, yaitu N. Setiap tugas dijalankan oleh thread Tablestore Reader khusus.

  • Tabel eksternal MaxCompute tidak dapat langsung membaca kolom yang berisi tipe data campuran dari Tablestore, misalnya kolom yang berisi nilai STRING dan DOUBLE sekaligus. Jika tabel Tablestore Anda berisi kolom semacam itu, impor data menggunakan tabel eksternal MaxCompute akan gagal. Sebagai solusi alternatif, Anda dapat menggunakan fitur sinkronisasi offline tabel tunggal di Data Integration DataWorks untuk menyinkronkan data dari Tablestore ke MaxCompute.

    Saat menggunakan sinkronisasi offline tabel tunggal, kelompok sumber daya Data Integration harus memiliki akses jaringan ke VPC tempat instans Tablestore berada agar dapat membaca data dan menjalankan tugas sinkronisasi. Solusi ini tidak menjamin kompatibilitas penuh untuk data tipe campuran. Anda mungkin perlu mengonversi atau memfilter tipe data menggunakan pemetaan bidang selama proses sinkronisasi. Penggunaan kelompok sumber daya Data Integration dikenai biaya tambahan.

Tipe bidang yang didukung

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

Kategori tipe

Tipe Tablestore

Integer

INTEGER

Floating-point

DOUBLE

String

STRING

Boolean

BOOLEAN

Binary

BINARY

Catatan
  • Tablestore tidak memiliki tipe data tanggal atau waktu bawaan. Di lapisan aplikasi, tipe Long biasanya digunakan untuk menyimpan timestamp Unix.

  • Dalam mode skrip, konfigurasikan tipe data INTEGER sebagai INT. DataWorks kemudian akan mengonversi tipe INT menjadi INTEGER. Jika Anda langsung menentukan tipe sebagai INTEGER, DataWorks akan mencatat error dan tugas gagal.

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.

Pengembangan tugas sinkronisasi

Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.

Konfigurasi sinkronisasi offline tabel tunggal

Lampiran I: Contoh skrip Reader dan parameter

Konfigurasi tugas sinkronisasi batch menggunakan editor kode

Jika Anda 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 Anda konfigurasi untuk sumber data saat mengatur tugas sinkronisasi batch menggunakan editor kode.

Demo Skrip Reader

Konfigurasi untuk membaca tabel lebar dalam row mode

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "newVersion":"true",// Gunakan versi baru Tablestore Reader.
                "mode": "normal",// Baca data dalam row mode.
                "isTimeseriesTable":"false",// Menentukan bahwa tabel adalah tabel lebar.
                "column":[// Kolom yang akan dibaca.
                    {
                        "name":"column1"// Nama kolom.
                    },
                    {
                        "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 maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,// true: mengaktifkan pengendalian aliran. false: menonaktifkan pengendalian aliran, dan pengaturan mbps tidak berpengaruh.
            "concurrent":1, // Konkurensi tugas.
            "mbps":"12"// Laju transfer maksimum dalam MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi pembacaan row mode untuk tabel deret waktu

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table": "",// Nama tabel.
                // Atur ke "normal" untuk membaca data deret waktu.
                "mode": "normal",
                // Atur ke "true" untuk membaca data deret waktu.
                "newVersion": "true",
                // Menentukan bahwa tabel adalah tabel deret waktu.
                "isTimeseriesTable":"true",
                // Nama measurement data deret waktu yang akan dibaca. Opsional. Jika tidak ditentukan, semua data dibaca.
                "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 maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,// true: mengaktifkan pengendalian aliran. false: menonaktifkan pengendalian aliran, dan pengaturan mbps tidak berpengaruh.
            "concurrent":1, // Konkurensi tugas.
            "mbps":"12"// Laju transfer maksimum dalam MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Konfigurasi pembacaan column-mode untuk tabel lebar

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "stepType":"ots",// Nama plugin.
            "parameter":{
                "datasource":"",// Sumber data.
                "table":"",// Nama tabel.
                "newVersion":"true",// Gunakan versi baru Tablestore Reader.
                "mode": "multiversion",// Baca data dalam column mode.
                "column":[// Menentukan kolom atribut yang akan diekspor.
                    {"name":"mobile"},
                    {"name":"name"},
                    {"name":"age"},
                    {"name":"salary"},
                    {"name":"marry"}
                ],
                "range":{// Rentang data yang akan 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 maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,// true: mengaktifkan pengendalian aliran. false: menonaktifkan pengendalian aliran, dan pengaturan mbps tidak berpengaruh.
            "concurrent":1, // Konkurensi tugas.
            "mbps":"12"// Laju transfer maksimum dalam MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Parameter umum untuk skrip Reader

Parameter

Deskripsi

Wajib

Bawaan

endpoint

Titik akhir server Tablestore. Untuk informasi lebih lanjut, lihat Endpoints.

Ya

Tidak ada

accessId

ID AccessKey untuk akun Tablestore Anda.

Ya

Tidak ada

accessKey

Rahasia AccessKey untuk akun Tablestore Anda.

Ya

Tidak ada

instanceName

Nama instans Tablestore. Instans adalah entitas yang digunakan untuk mengelola layanan Tablestore.

Setelah mengaktifkan Tablestore, buat instans di konsol manajemen. Anda kemudian dapat membuat dan mengelola tabel dalam instans tersebut.

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

Ya

Tidak ada

table

Nama tabel sumber. Hanya satu tabel yang dapat ditentukan. Tablestore tidak mendukung sinkronisasi multi-tabel.

Ya

Tidak ada

newVersion

Menentukan versi plugin Tablestore Reader yang akan digunakan.

  • false: Tablestore Reader lama, yang hanya mendukung pembacaan row mode pada tabel lebar.

  • true: Tablestore Reader baru mendukung row mode, column mode, tabel deret waktu, dan tabel lebar.

Kami merekomendasikan penggunaan Tablestore Reader baru karena menawarkan lebih banyak fitur dan mengonsumsi lebih sedikit sumber daya.

Konfigurasi versi plugin baru kompatibel dengan versi lama. Tugas lama dapat berjalan seperti yang diharapkan setelah Anda menambahkan konfigurasi newVersion=true.

Tidak

false

mode

Menentukan mode pembacaan data. Dua mode didukung:

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

  • multiversion: Membaca data dalam column mode. Format data adalah {kunci primer, nama kolom atribut, timestamp, nilai kolom atribut}.

Konfigurasi ini hanya berlaku untuk versi baru Tablestore Reader (newVersion:true).

Tablestore Reader lama mengabaikan konfigurasi mode dan hanya mendukung pembacaan dalam row mode.

Tidak

normal

isTimeseriesTable

Menentukan apakah tabel sumber adalah tabel deret waktu.

  • false: Tabel adalah tabel lebar.

  • true: Tabel adalah tabel deret waktu.

Konfigurasi ini hanya berlaku dengan pengaturan newVersion:true & mode:normal.

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

Tidak

false

Konfigurasi tambahan untuk parameter skrip Reader

Tablestore Reader mendukung tiga skenario: membaca tabel lebar dalam row mode, membaca tabel deret waktu dalam row mode, dan membaca tabel lebar dalam column mode. Bagian berikut menjelaskan parameter tambahan untuk setiap skenario.

Parameter pembacaan row mode untuk tabel lebar

Parameter

Deskripsi

Wajib

Bawaan

column

Kolom yang akan dibaca, ditentukan sebagai array JSON. Anda harus menentukan nama kolom karena Tablestore adalah database NoSQL tanpa skema.

  • Untuk membaca kolom tertentu, gunakan format: {"name":"col1"}.

  • Anda dapat menentukan subset kolom. Kolom yang tidak ditentukan tidak akan dibaca.

  • Untuk membaca kolom konstan, gunakan parameter type untuk menentukan tipe konstan tersebut. Contoh: {"type":"STRING", "value":"DataX"}. Tipe yang didukung adalah String, Int, Double, Bool, dan Binary (gunakan encoding Base64). Anda juga dapat menggunakan INF_MIN (nilai minimum yang ditentukan sistem) dan INF_MAX (nilai maksimum yang ditentukan sistem). Jika Anda menggunakan INF_MIN atau INF_MAX, jangan tentukan properti value, atau akan terjadi error.

  • Fungsi dan ekspresi kustom tidak didukung karena Tablestore tidak menyediakan kemampuan mirip SQL.

Ya

Tidak ada

begin dan end

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

Parameter begin dan end menggambarkan distribusi rentang kunci primer Tablestore. Untuk rentang tak hingga, Anda dapat menggunakan {"type":"INF_MIN"} dan {"type":"INF_MAX"} untuk merepresentasikan begin dan end. Dalam nilai-nilai ini, parameter type menunjukkan tipe data yang akan diekstraksi.

Catatan
  • Parameter begin dan end secara bawaan adalah [INF_MIN, INF_MAX), yang berarti semua data dibaca.

  • Jika jumlah nilai begin dan end yang dikonfigurasi kurang dari jumlah kunci primer, berdasarkan prinsip pencocokan kunci primer paling kiri, rentang untuk kunci primer yang tidak dikonfigurasi secara bawaan adalah [INF_MIN, INF_MAX).

  • Jika hanya parameter begin atau end yang ditentukan, rentang data yang diekspor adalah [begin, INF_MAX) atau [INF_MIN, end).

  • Ketika hanya ada satu kolom kunci primer, ekspor data yang dikonfigurasi oleh parameter begin dan end mengikuti aturan interval kiri-tertutup, kanan-terbuka.

  • Untuk beberapa kolom kunci primer, rentang untuk kolom kunci primer terakhir adalah kiri-tertutup dan kanan-terbuka. Untuk semua kolom kunci primer lainnya, rentangnya adalah interval tertutup (termasuk nilai awal dan akhir).

Sebagai contoh, Anda mengekstraksi data dari tabel Tablestore yang memiliki kunci primer tiga kolom: [Hundreds, Tens,Ones]. Kunci primer data dalam tabel tersebut adalah (0,0,0), (0,0,1), (0,0,2), (0,0,3), ..., (9,9,8), dan (9,9,9), total 1.000 baris. Konfigurasi untuk parameter begin dan end adalah sebagai berikut.

  • Contoh 1: Ekstraksi data dengan rentang Hundreds [3, 5] dan rentang Tens [4, 6]. Kunci primer data yang diekstraksi mencakup (3,4,0)(3,4,1)...(4,4,0),(4,0,1)...(5,6,8)(5,6,9). Konfigurasinya sebagai berikut:

    "range": {
          "begin": [
            {"type":"INT", "value":"3"},  // Tentukan nilai minimum untuk Hundreds.
            {"type":"INT", "value":"4"}  // Tentukan nilai minimum untuk Tens.
          ],
          "end": [
            {"type":"INT", "value":"5"}, // Tentukan nilai maksimum untuk Hundreds.
            {"type":"INT", "value":"6"} // Tentukan nilai maksimum untuk Tens.
          ]
        }
  • Contoh 2: Ekstraksi data untuk rentang berikut: Hundreds dalam [3, 5], Tens dalam [4, 6], dan Ones dalam rentang [5, 7). Kunci primer data yang diekstraksi mencakup (3, 4, 5), (3, 4, 6), ..., (4, 4, 5), (4, 4, 6), ..., (5, 6, 5), (5, 6, 6). Konfigurasinya sebagai berikut:

    "range": {
          "begin": [
            {"type":"INT", "value":"3"},  // Tentukan nilai minimum untuk Hundreds.
            {"type":"INT", "value":"4"},  // Tentukan nilai minimum untuk Tens.
            {"type":"INT", "value":"5"}  // Tentukan nilai minimum untuk Ones.
          ],
          "end": [
            {"type":"INT", "value":"5"}, // Tentukan nilai maksimum untuk Hundreds.
            {"type":"INT", "value":"6"}, // Tentukan nilai maksimum untuk Tens.
            {"type":"INT", "value":"7"}  // Tentukan nilai maksimum untuk Ones.
          ]
        }

Tidak

[INF_MIN, INF_MAX)

split

Parameter lanjutan untuk menentukan aturan sharding kustom. Kami tidak merekomendasikan penggunaan parameter ini dalam kebanyakan kasus.

Anda dapat menggunakan parameter split untuk menentukan rentang data kustom untuk sharding. Ini biasanya digunakan untuk menangani hot spot data di Tablestore. Contohnya:

{
  "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 dijalankan, data dibagi menjadi enam segmen yang dibaca secara konkuren. Kami merekomendasikan jumlah segmen lebih besar daripada konkurensi tugas.

// Segmen 1
[min_value, 1)
// Segmen 2
[1, 2)
// Segmen 3
[2, 3)
// Segmen 4
[3, 4)
// Segmen 5
[4, 5)
// Segmen 6
[5, max_value)

Tidak

Jika parameter ini tidak ditentukan, logika sharding otomatis akan digunakan.

Logika sharding otomatis menemukan nilai minimum dan maksimum kunci partisi dan membagi rentang tersebut menjadi segmen-segmen yang merata.

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

Parameter untuk membaca tabel deret waktu dalam row mode

Parameter

Deskripsi

Wajib

Bawaan

column

Array di mana setiap elemen merepresentasikan satu kolom. Anda dapat mengonfigurasi kolom konstan dan kolom atribut.

Untuk kolom konstan, konfigurasikan bidang-bidang berikut:

  • type: Wajib. Tipe data nilai bidang. Tipe yang didukung: string, int, double, bool, binary.

  • value: Wajib. Nilai bidang.

Untuk kolom atribut, konfigurasikan bidang-bidang berikut:

  • name: Wajib. Nama kolom. Nama-nama berikut telah ditentukan sebelumnya untuk data deret waktu:

    • Nama 'measurement' dari timeline diidentifikasi oleh _m_name, dan tipe datanya adalah String.

    • Sumber data timeline diidentifikasi oleh _data_source, dan tipe datanya adalah String.

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

    • Timestamp timeline menggunakan _time sebagai identifikatornya. Tipe datanya adalah Long.

  • is_timeseries_tag: Opsional. Menentukan apakah nama kolom ini diperlakukan sebagai kunci tag untuk mencari nilainya dari tag timeline. Nilai bawaannya adalah false.

  • type: Opsional. Tipe data nilai bidang. Tipe yang didukung: string, int, double, bool, binary. Nilai bawaannya adalah string.

Skrip berikut adalah contoh pembacaan empat kolom:

"column": [
  {
    "name": "_m_name"               // Bidang nama measurement timeline.
  },
  {
    "name": "tag_key",                // Nilai yang sesuai dengan tag_key dalam bidang tag timeline.
    "is_timeseries_tag":"true"
  },
  {
    "name": "string_column",        // Kolom bernama string_column dalam fields.
    "type":"string"                    // Tipe data kolom adalah string.
  },
  {
    "value": "constant_value",        // Kolom konstan dengan nilai tetap "constant_value".
    "type":"string"
  }
],

Ya

Tidak ada

measurementName

Nama measurement timeline yang akan dibaca. Jika tidak ditentukan, data dari semua timeline dalam tabel akan dibaca.

Tidak

Tidak ada

timeRange

Rentang waktu data yang diminta. Rentang ini merupakan interval kiri-tertutup, kanan-terbuka [begin, end). Nilai begin harus lebih kecil dari nilai end. Satuan timestamp adalah mikrodetik. Formatnya sebagai berikut:

"timeRange":{
    // begin: Opsional. Nilai bawaan adalah 0. Nilai dapat berkisar dari 0 hingga LONG_MAX.
    "begin":1400000000000,
    // end: Opsional. Nilai bawaan adalah Long.MAX_VALUE (9223372036854775807L). Nilai dapat berkisar dari 0 hingga LONG_MAX.
    "end"  :1600000000000
},

Tidak

[0, LONG_MAX)

Parameter untuk membaca tabel lebar dalam column mode

Parameter

Deskripsi

Wajib

Bawaan

column

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

Format:

"column": [
    {"name": "{your-column-name-1}"},
    {"name": "{your-column-name-2}"}
],
Catatan
  • Kolom konstan tidak didukung dalam column mode.

  • Kolom kunci primer tidak dapat ditentukan. Tupel 4-elemen yang diekspor secara bawaan mencakup kunci primer lengkap.

  • Jangan menentukan kolom yang sama lebih dari sekali.

Ya

Tidak ada

range

Rentang data yang akan dibaca. Rentang ini merupakan interval kiri-tertutup, kanan-terbuka [begin, end). Nilai begin dan end dapat berupa array kosong, awalan kunci primer, atau kunci primer lengkap. Ketika begin dan end menentukan awalan, akhiran kunci primer yang tidak ditentukan secara bawaan adalah INF_MIN atau INF_MAX berdasarkan arah pembacaan. Parameter opsional split memungkinkan Anda menentukan titik pemisahan pada kunci primer pertama (kunci partisi) untuk mengaktifkan pembacaan konkuren. Titik pemisahan harus berada dalam range yang ditentukan dan mengikuti urutan pengurutan yang sama.

  • Jika begin lebih kecil dari end, data dibaca dalam urutan naik.

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

  • begin dan end tidak boleh sama.

Tipe yang didukung untuk properti type:

  • string

  • int

  • binary: Nilainya harus berupa string yang di-encode Base64, karena JSON tidak mendukung data biner secara langsung.

  • INF_MIN: Merepresentasikan minus tak hingga.

  • INF_MAX: Merepresentasikan plus tak hingga.

Format:

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

    "end":[{"type":"string", "value":"g"},{"type":"INF_MAX"}],

    "split":[{"type":"string", "value":"b"}, {"type":"string", "value":"c"}]
},

Tidak

Semua data

timeRange

Rentang waktu versi data yang diminta. Rentang ini merupakan interval kiri-tertutup, kanan-terbuka [begin, end). Nilai begin harus lebih kecil dari nilai end. Satuan timestamp adalah mikrodetik.

Format:

"timeRange":{
    // begin: Opsional. Nilai bawaan adalah 0. Nilai dapat berkisar dari 0 hingga LONG_MAX.
    "begin":1400000000000,
    // end: Opsional. Nilai bawaan adalah Long.MAX_VALUE (9223372036854775807L). Nilai dapat berkisar dari 0 hingga LONG_MAX.
    "end"  :1600000000000
},

Tidak

[0, LONG_MAX)

maxVersion

Jumlah maksimum versi yang akan dibaca untuk setiap kolom. Nilainya dapat berkisar dari 1 hingga INT32_MAX.

Tidak

Semua versi

Lampiran 2: Contoh skrip Writer dan parameter

Konfigurasi tugas sinkronisasi batch menggunakan editor kode

Jika Anda 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 Anda konfigurasi untuk sumber data saat mengatur tugas sinkronisasi batch menggunakan editor kode.

Contoh skrip Writer

Menulis ke tabel lebar (row mode)

{
    "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 Tablestore Writer.
                "mode": "normal",// Tulis data dalam row mode.
                "isTimeseriesTable":"false",// Tabel tujuan adalah tabel lebar.
                "primaryKey" : [// Kolom kunci primer tabel Tablestore.
                    {"name":"gid", "type":"INT"},
                    {"name":"uid", "type":"STRING"}
                 ],
                "column" : [// Kolom atribut.
                      {"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 maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,// Mengaktifkan pembatasan laju. Jika false, `mbps` diabaikan.
            "concurrent":1, // Jumlah tugas konkuren.
            "mbps":"12"// Batas laju dalam MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Menulis ke tabel deret waktu (row mode)

{
    "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 maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,// Mengaktifkan pembatasan laju. Jika false, `mbps` diabaikan.
            "concurrent":1, // Jumlah tugas konkuren.
            "mbps":"12"// Batas laju dalam MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Menulis ke tabel lebar (column mode)

{
    "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 maksimum catatan error yang diizinkan.
        },x`
        "speed":{
            "throttle":true,// Mengaktifkan pembatasan laju. Jika false, `mbps` diabaikan.
            "concurrent":1, // Jumlah tugas konkuren.
            "mbps":"12"// Batas laju dalam MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Parameter skrip writer umum

Parameter

Deskripsi

Wajib

Bawaan

datasource

Nama sumber data. Nilai parameter ini harus persis sama dengan nama sumber data yang Anda tambahkan.

Ya

Tidak ada

endpoint

Titik akhir instans Tablestore. Untuk informasi lebih lanjut, lihat Endpoints.

Ya

Tidak ada

accessId

ID AccessKey untuk akun Tablestore Anda.

Ya

Tidak ada

accessKey

Rahasia AccessKey untuk akun Tablestore Anda.

Ya

Tidak ada

instanceName

Nama instans Tablestore. Instans adalah unit dasar untuk manajemen sumber daya.

Setelah mengaktifkan Tablestore, Anda harus membuat instans di konsol manajemen sebelum dapat membuat dan mengelola tabel. Kontrol akses dan pengukuran sumber daya dilakukan pada tingkat instans.

Ya

Tidak ada

table

Nama tabel tujuan. Anda hanya dapat menentukan satu tabel karena Tablestore tidak mendukung sinkronisasi multi-tabel.

Ya

Tidak ada

newVersion

Menentukan versi plugin Tablestore Writer.

  • false: Menggunakan versi lama Tablestore Writer, yang hanya mendukung penulisan ke tabel lebar dalam row mode.

  • true: Tablestore writer baru, yang mendukung row mode, column mode, tabel deret waktu, tabel lebar, dan fitur kolom kunci primer auto-increment.

Kami merekomendasikan penggunaan versi baru karena mendukung lebih banyak fitur dan mengonsumsi lebih sedikit sumber daya.

Versi plugin baru kompatibel dengan konfigurasi dari versi lama, yang berarti tugas lama dapat berjalan normal setelah konfigurasi newVersion=true ditambahkan.

Ya

false

mode

Mode penulisan data. Nilai yang valid:

  • normal: Menulis data dalam format standar (row mode).

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

Konfigurasi ini hanya berlaku ketika newVersion:true ditetapkan.

Tablestore Writer lama mengabaikan konfigurasi mode dan hanya mendukung pembacaan dalam row mode.

Tidak

normal

isTimeseriesTable

Menentukan apakah tabel target adalah tabel deret waktu.

  • false: Tabel data adalah tabel lebar reguler.

  • true: Tabel data adalah tabel data deret waktu.

Konfigurasi ini hanya efektif untuk pengaturan newVersion:true & mode:normal (Column mode tidak kompatibel dengan tabel deret waktu).

Tidak

false

Parameter skrip writer tambahan

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

Parameter tabel lebar (row mode)

Parameter

Deskripsi

Wajib

Bawaan

primaryKey

Kolom kunci primer tabel Tablestore, ditentukan sebagai array JSON. Karena Tablestore adalah database NoSQL, Anda harus menentukan nama kolom saat mengimpor data.

Data Integration mendukung konversi tipe. Jika data sumber bukan bertipe STRING atau INT, Tablestore Writer akan mengonversi tipe data tersebut. Contoh:

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

Kunci primer Tablestore hanya mendukung tipe data STRING dan INT. Oleh karena itu, Anda hanya dapat menentukan STRING dan INT untuk tipe dalam konfigurasi Tablestore Writer.

Ya

Tidak ada

column

Kolom atribut yang akan disinkronkan, ditentukan sebagai array JSON.

Konfigurasi contoh:

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

Dalam konfigurasi, name adalah nama kolom tujuan di Tablestore, dan type adalah tipe data yang akan ditulis ke kolom tersebut. Tablestore mendukung tipe data STRING, INT, DOUBLE, BOOL, dan BINARY.

Catatan

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

Ya

Tidak ada

writeMode

Perilaku penulisan. Nilai yang valid:

  • PutRow: Sesuai dengan operasi PutRow API Tablestore dan memasukkan data ke baris tertentu. Jika baris tidak ada, baris baru dibuat. Jika baris sudah ada, baris yang ada akan ditimpa.

  • UpdateRow: Sesuai dengan operasi UpdateRow dalam API Tablestore, yang memperbarui data di baris tertentu. Jika baris tidak ada, baris baru ditambahkan. Jika baris sudah ada, operasi ini menambah, memodifikasi, atau menghapus nilai di kolom tertentu berdasarkan permintaan.

Ya

Tidak ada

enableAutoIncrement

Menentukan apakah diizinkan menulis ke tabel yang memiliki kolom kunci primer auto-increment.

  • true: Plugin secara otomatis memindai tabel tujuan untuk kolom auto-increment dan menambahkannya selama proses penulisan. Anda tidak perlu mengonfigurasi nama kolom auto-increment.

  • false: Error dilaporkan jika Anda menulis ke tabel yang memiliki kolom kunci primer auto-increment.

Tidak

false

requestTotalSizeLimitation

Membatasi ukuran total satu baris yang ditulis ke Tablestore. Nilainya harus berupa angka.

Tidak

1 MB

attributeColumnSizeLimitation

Membatasi ukuran nilai satu kolom atribut yang ditulis ke Tablestore. Nilainya harus berupa angka.

Tidak

2 MB

primaryKeyColumnSizeLimitation

Membatasi ukuran nilai satu kolom kunci primer yang ditulis ke Tablestore. Nilainya harus berupa angka.

Tidak

1 KB

attributeColumnMaxCount

Membatasi jumlah kolom atribut dalam satu baris yang ditulis ke Tablestore. Nilainya harus berupa angka.

Tidak

1.024

Parameter tabel deret waktu (row mode)

Parameter

Deskripsi

Wajib

Bawaan

column

Setiap elemen dalam array column sesuai dengan satu bidang dalam data deret waktu. Anda dapat mengonfigurasi parameter berikut untuk setiap elemen:

  • name: Wajib. Nama bidang. Nama bidang berikut telah ditentukan sebelumnya:

    • Nama 'measurement' timeline diidentifikasi oleh _m_name, dan tipe datanya adalah String.

    • Sumber data timeline diidentifikasi oleh _data_source, yang bertipe data String.

    • 'Tag' timeline diidentifikasi oleh _tags. Tipe datanya adalah String, dan format string-nya adalah ["tagKey1=value1","tagKey2=value2"].

    • 'Timestamp' timeline diidentifikasi oleh _time, dengan tipe data Long dan satuan bawaan mikrodetik.

  • is_timeseries_tag: Opsional. Menentukan apakah kolom tersebut adalah pasangan kunci-nilai dalam bidang tag. Nilai bawaannya adalah false.

  • type: Opsional. Tipe data nilai bidang. Nilai bawaannya adalah string. Tipe yang didukung: string, int, double, bool, dan binary.

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

Contoh: Catatan data yang akan ditulis berisi enam bidang:

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

Satuan untuk bidang timestamp time yang dikonfigurasi dapat berupa NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, atau MINUTES.

Tidak

MICROSECONDS

Parameter tabel lebar (column mode)

Parameter

Deskripsi

Wajib

Bawaan

primaryKey

Kolom kunci primer tabel.

Untuk mengurangi biaya konfigurasi, Anda tidak perlu mengonfigurasi posisi primaryKey dalam catatan (baris). Namun, format catatan harus tetap. primaryKey harus berada di awal baris, dan columnName ditempatkan setelah primaryKey. Format catatan adalah: {pk0,pk1...}, {columnName}, {timestamp}, {value}.

Sebagai contoh, pertimbangkan sembilan catatan data berikut:

Contoh konfigurasi:

1,pk1,row1,1677699863871,value_0_0 <p>Konfigurasi contoh:</p> 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
"primaryKey" : [
    "gid",
    "uid"
    ],

Data ditulis ke tabel lebar sebagai berikut:

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

Awalan yang akan dihapus dari nama kolom.

Untuk data yang diimpor dari HBase, cf dan qualifier bersama-sama membentuk columnName. Namun, Tablestore tidak mendukung cf, sehingga cf harus difilter.

Contoh: "columnNamePrefixFilter":"cf:"

Catatan
  • Parameter ini opsional. Jika Anda tidak menentukan parameter ini atau mengaturnya sebagai string kosong, tidak ada awalan yang difilter.

  • Jika nilai dalam kolom columnName dari catatan yang ditambahkan oleh Data Integration tidak diawali dengan awalan tersebut, catatan tersebut akan ditempatkan di pengumpul data kotor.

Tidak

Tidak ada

FAQ

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

    1. Konfigurasi Tablestore Writer harus mencakup dua parameter berikut:

      "newVersion": "true",
      "enableAutoIncrement": "true",
    2. Jangan tentukan nama kolom kunci primer auto-increment dalam konfigurasi Tablestore Writer.

    3. Dalam konfigurasi Tablestore Writer, jumlah entri dalam primaryKey ditambah jumlah entri dalam column harus sama dengan jumlah kolom dari Tablestore Reader hulu.

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

    Sebagai contoh, catatan data memiliki tiga tag: phone=xiaomi, RAM=8G, dan camera=LEICA.

    • Contoh ekspor (Tablestore Reader)

      • Untuk mengekspor semua tag sebagai satu kolom, gunakan konfigurasi berikut:

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

        DataWorks mengekspor tag sebagai satu kolom dengan format berikut:

        ["phone=xiaomi","camera=LEICA","RAM=8G"]
      • Untuk mengekspor tagphone dancamera sebagai kolom terpisah, gunakan konfigurasi berikut:

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

        DataWorks mengekspor dua kolom dengan format berikut:

        xiaomi, LEICA
    • Contoh impor (Tablestore Writer)

      Anggaplah Tablestore Reader hulu menyediakan dua kolom data:

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

      • Kolom lain berisi: 6499.

      Anggaplah Anda ingin menambahkan data dari kedua kolom ini ke bidang tag. Format yang diharapkan adalah sebagai berikut: FormatUntuk melakukannya, konfigurasikan pengaturan sebagai berikut:

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

      • Konfigurasi kolom kedua mengimpor nilai sebagai tag terpisah, menghasilkanprice=6499.