Jika API GetRange mengembalikan data di luar rentang yang ditentukan, buat indeks sekunder untuk mengurutkan ulang kunci primer, lalu kueri indeks tersebut alih-alih tabel dasar.
Gejala
Saat menjalankan kueri rentang — melalui Konsol, SDK, tabel eksternal Tablestore, atau Tablestore Reader — API GetRange mengembalikan baris di luar rentang yang Anda tentukan.
Kemungkinan penyebab
Kondisi kueri tidak mengikuti aturan pencocokan awalan paling kiri (leftmost prefix matching rule).
Tablestore secara fisik mengurutkan baris berdasarkan kolom kunci primer sesuai urutan yang didefinisikan dalam skema tabel. Rentang yang ditetapkan pada kolom kunci primer hanya diterapkan jika semua kolom sebelumnya memiliki nilai eksak (bukan rentang). Jika kolom sebelumnya menggunakan rentang, maka rentang yang ditetapkan pada kolom berikutnya akan diabaikan tanpa peringatan.
Aturan pencocokan awalan paling kiri — apa yang berfungsi dan apa yang tidak:
Berfungsi: Menetapkan nilai eksak untuk kolom kunci primer pertama dan rentang untuk kolom kedua hanya mengembalikan baris di mana kolom kedua berada dalam rentang tersebut.
Tidak berfungsi: Menetapkan rentang untuk kolom kunci primer pertama dan rentang (atau nilai eksak) untuk kolom kedua — kondisi pada kolom kedua diabaikan.
Sebagai contoh, jika beginPrimaryKey = INF_MIN dan endPrimaryKey = INF_MAX untuk kolom pertama, serta beginPrimaryKey = 10 dan endPrimaryKey = 10 untuk kolom kedua, kueri akan mengembalikan semua baris dalam tabel, bukan hanya baris di mana kolom kedua bernilai 10. Rentang pada kolom pertama mencakup seluruh ruang kunci, sehingga kondisi pada kolom kedua tidak berpengaruh.
Solusi
Buat indeks sekunder untuk mengurutkan ulang kunci primer sehingga kolom yang ingin Anda filter menjadi kunci utama. Kueri langsung ke indeks sekunder alih-alih ke tabel dasar. Dengan cara ini, Anda dapat menerapkan kondisi rentang yang efektif tanpa mengubah skema tabel Anda.
Pilih pendekatan yang sesuai dengan skenario Anda:
Kueri rentang melalui Konsol atau SDK — Tanpa indeks sekunder, Anda harus melakukan pemindaian seluruh tabel dan membuang baris yang tidak diinginkan. Dengan indeks sekunder, jalankan kueri rentang langsung pada indeks tersebut. Untuk petunjuk langkah demi langkah, lihat Menggunakan indeks sekunder dari Konsol atau Menggunakan indeks sekunder dengan SDK.
Kueri tabel eksternal Tablestore — Tetapkan nama tabel dalam pernyataan
CREATE TABLEke nama indeks sekunder. Hal ini akan mengarahkan kueri tabel eksternal melalui indeks dan menerapkan kondisi rentang Anda dengan benar. Untuk detailnya, lihat Tabel eksternal Tablestore.Sinkronisasi data dengan Tablestore Reader — Tetapkan nama tabel dalam skrip sinkronisasi ke nama indeks sekunder. Pekerjaan sinkronisasi tersebut kemudian akan membaca dari indeks dan menghormati rentang yang Anda definisikan. Untuk detailnya, lihat Mengonfigurasi Tablestore (OTS) Reader.