Topik ini menjelaskan cara membaca rentang baris dari tabel Tablestore menggunakan Go SDK.
Prasyarat
Metode
func (tableStoreClient *TableStoreClient) GetRange(request *GetRangeRequest) (*GetRangeResponse, error)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 = endPKTetapkan 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