All Products
Search
Document Center

Tablestore:Range read

Last Updated:Apr 01, 2026

Topik ini menjelaskan cara membaca rentang baris dari tabel Tablestore menggunakan Go SDK.

Prasyarat

Inisialisasi Tablestore Client

Metode

func (tableStoreClient *TableStoreClient) GetRange(request *GetRangeRequest) (*GetRangeResponse, error)

Parameter GetRangeRequest

  • RangeRowQueryCriteria (wajib)*RangeRowQueryCriteria: Menentukan kriteria untuk range read.

    Parameter

    Tipe

    Deskripsi

    TableName (wajib)

    string

    Nama tabel.

    StartPrimaryKey (wajib)

    *PrimaryKey

    Kunci primer awal, termasuk nama dan nilai kolomnya.

    • Set hasil menyertakan baris yang sesuai dengan kunci primer awal.

    • Jumlah dan tipe kolom kunci primer harus sesuai dengan skema tabel.

    • Untuk pembacaan maju (forward read), kunci primer awal harus lebih kecil daripada kunci primer akhir.

    • Untuk pembacaan mundur (backward read), kunci primer awal harus lebih besar daripada kunci primer akhir.

    • Gunakan AddPrimaryKeyColumnWithMinValue untuk merepresentasikan nilai minimum yang mungkin dan AddPrimaryKeyColumnWithMaxValue untuk merepresentasikan nilai maksimum yang mungkin pada kolom kunci primer.

    EndPrimaryKey (wajib)

    *PrimaryKey

    Kunci primer akhir, termasuk nama dan nilai kolomnya.

    • Set hasil tidak menyertakan baris yang sesuai dengan kunci primer akhir.

    • Jumlah dan tipe kolom kunci primer harus sesuai dengan skema tabel.

    • Gunakan AddPrimaryKeyColumnWithMinValue untuk merepresentasikan nilai minimum yang mungkin dan AddPrimaryKeyColumnWithMaxValue untuk merepresentasikan nilai maksimum yang mungkin pada kolom kunci primer.

    Direction (opsional)

    Direction

    Arah pembacaan.

    • FORWARD: Melakukan pembacaan maju. Ini adalah nilai default.

    • BACKWARD: Melakukan pembacaan mundur.

    MaxVersion (opsional)

    int32

    Jumlah maksimum versi yang dikembalikan untuk setiap kolom.

    • Anda harus menentukan salah satu antara jumlah versi maksimum atau rentang waktu.

    • Jika jumlah versi data yang sesuai dengan kondisi kueri melebihi nilai ini, jumlah versi yang ditentukan akan dikembalikan dalam urutan kronologis terbalik (dari yang terbaru ke yang terlama).

    TimeRange (opsional)

    *TimeRange

    Rentang waktu versi yang akan dikembalikan.

    • Anda harus menentukan salah satu antara jumlah versi maksimum atau rentang waktu.

    • Setiap kolom atribut dalam tabel Tablestore dapat memiliki beberapa versi. Menetapkan rentang waktu membatasi versi yang dikembalikan hanya pada versi dalam rentang tersebut.

    Limit (opsional)

    int32

    Jumlah maksimum baris yang dikembalikan, yang harus lebih besar dari 0. Jika set hasil lebih besar dari nilai ini, respons akan menyertakan NextStartPrimaryKey untuk mengaktifkan paginasi.

    ColumnsToGet (opsional)

    []string

    Kolom yang akan dibaca. Kolom ini dapat berupa kolom kunci primer atau kolom atribut.

    • Jika Anda tidak menentukan parameter ini, semua kolom baris akan dikembalikan.

    • Jika baris yang sesuai tidak berisi salah satu kolom yang ditentukan, baris tersebut tidak disertakan dalam hasil.

    Filter (opsional)

    ColumnFilter

    Kondisi filter. Untuk informasi selengkapnya, lihat Filters.

    • Jika Anda menentukan ColumnsToGet dan Filter, Tablestore pertama-tama mengambil kolom yang ditentukan dalam ColumnsToGet, lalu menerapkan filter tersebut.

    TransactionId (opsional)

    *string

    ID transaksi lokal digunakan untuk mengidentifikasi secara unik sebuah transaksi lokal. Untuk informasi selengkapnya, lihat Local Transaction.

Kode contoh

Kode contoh berikut membaca data dari tabel test_table dengan kunci primer lebih besar dari row1.

func GetRangeSample(client *tablestore.TableStoreClient) {
    // Bangun kriteria kueri.
    rangeRowQueryCriteria := new(tablestore.RangeRowQueryCriteria)
    rangeRowQueryCriteria.TableName = "test_table"
    // Tetapkan kunci primer awal untuk kueri.
    startPK := new(tablestore.PrimaryKey)
    startPK.AddPrimaryKeyColumn("id", "row1")
    rangeRowQueryCriteria.StartPrimaryKey = startPK
    // Tetapkan kunci primer akhir untuk kueri. Kunci primer akhir bersifat eksklusif.
    endPK := new(tablestore.PrimaryKey)
    endPK.AddPrimaryKeyColumnWithMaxValue("id")
    rangeRowQueryCriteria.EndPrimaryKey = endPK
    // Tetapkan jumlah maksimum versi yang akan dibaca.
    rangeRowQueryCriteria.MaxVersion = 1

    // Panggil metode GetRange untuk mengkueri data.
    getRangeRequest := new(tablestore.GetRangeRequest)
    getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria
    getRangeResponse, err := client.GetRange(getRangeRequest)

    // Proses respons.
    if err != nil {
        fmt.Println("Range get failed with error: ", err)
    } else {
        fmt.Printf("* RequestId: %s \n", getRangeResponse.RequestId)
        fmt.Printf("* Read CU Cost: %d \n", getRangeResponse.ConsumedCapacityUnit.Read)
        fmt.Printf("* Write CU Cost: %d \n", getRangeResponse.ConsumedCapacityUnit.Write)
        fmt.Println("* Rows Data:")
        for _, row := range getRangeResponse.Rows {
            fmt.Printf("PrimaryKey: %v; Columns: ", row.PrimaryKey.PrimaryKeys)
            for _, column := range row.Columns {
                fmt.Printf("%v ", column)
            }
            fmt.Printf("\n")
        }
    }
}

Satu kali range read mengembalikan maksimal 5.000 baris atau 4 MB data. Jika set hasil melebihi batas tersebut, respons akan menyertakan NextStartPrimaryKey. Gunakan kunci ini dalam permintaan berikutnya untuk mengambil halaman hasil berikutnya. Kode berikut menunjukkan paginasi tersebut.

for {
    // Panggil metode GetRange untuk mengkueri data.
    getRangeRequest := new(tablestore.GetRangeRequest)
    getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria
    getRangeResponse, err := client.GetRange(getRangeRequest)
    // Proses respons.
    if err != nil {
        fmt.Println("Range get failed with error: ", err)
        break
    } else {
        fmt.Printf("* RequestId: %s \n", getRangeResponse.RequestId)
        fmt.Printf("* Read CU Cost: %d \n", getRangeResponse.ConsumedCapacityUnit.Read)
        fmt.Printf("* Write CU Cost: %d \n", getRangeResponse.ConsumedCapacityUnit.Write)
        fmt.Printf("* Rows Count: %d \n", len(getRangeResponse.Rows))
        fmt.Println("* Rows Data:")
        for _, row := range getRangeResponse.Rows {
            fmt.Printf("PrimaryKey: %v; Columns: ", row.PrimaryKey.PrimaryKeys)
            for _, column := range row.Columns {
                fmt.Printf("%v ", column)
            }
            fmt.Printf("\n")
        }
    }
    // Tetapkan kunci primer awal untuk iterasi berikutnya.
    if getRangeResponse.NextStartPrimaryKey != nil {
        startPK := new(tablestore.PrimaryKey)
        startPK.AddPrimaryKeyColumn("id", getRangeResponse.NextStartPrimaryKey.PrimaryKeys[0].Value)
        rangeRowQueryCriteria.StartPrimaryKey = startPK
    } else {
        break
    }
}

Anda juga dapat mengonfigurasi pengaturan berikut dalam kueri Anda:

  • Tetapkan arah pembacaan.

    // Tetapkan arah ke backward.
    rangeRowQueryCriteria.Direction = tablestore.BACKWARD
    // Tetapkan kunci primer awal. Untuk pembacaan backward, kunci primer awal harus lebih besar daripada kunci primer akhir.
    startPK := new(tablestore.PrimaryKey)
    startPK.AddPrimaryKeyColumnWithMaxValue("id")
    rangeRowQueryCriteria.StartPrimaryKey = startPK
    // Tetapkan kunci primer akhir. Kunci primer akhir bersifat eksklusif.
    endPK := new(tablestore.PrimaryKey)
    endPK.AddPrimaryKeyColumn("id", "row1")
    rangeRowQueryCriteria.EndPrimaryKey = endPK
  • Tetapkan rentang waktu untuk hanya membaca versi dari periode tersebut.

    // Tetapkan rentang waktu kueri ke 24 jam terakhir.
    timeRange := new(tablestore.TimeRange)
    timeRange.Start = int64(time.Now().Unix() * 1000 - 86400 * 1000) 
    timeRange.End = int64(time.Now().Unix() * 1000) 
    rangeRowQueryCriteria.TimeRange = timeRange;
  • Tentukan kolom atribut yang akan dikembalikan.

    rangeRowQueryCriteria.AddColumnToGet("col1")
  • Batasi jumlah baris yang dikembalikan dalam satu permintaan.

    rangeRowQueryCriteria.Limit = 10

Topik terkait

Batch read