Tablestore memungkinkan Anda membaca satu baris data atau data dengan nilai kunci utama dalam rentang tertentu dari tabel indeks. Jika tabel indeks berisi kolom atribut yang ingin dikembalikan, Anda dapat membaca langsung dari tabel indeks. Jika tidak, Anda perlu mengambil data dari tabel data tempat tabel indeks dibuat.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Indeks sekunder telah dibuat. Untuk informasi lebih lanjut, lihat Buat indeks sekunder.
Catatan penggunaan
Anda hanya dapat menggunakan tabel indeks untuk membaca data.
Kolom kunci utama pertama dari indeks sekunder lokal harus sama dengan kolom kunci utama pertama dari tabel data.
Jika kolom atribut yang ingin dikembalikan tidak terdapat dalam tabel indeks, Anda perlu mengambil data dari tabel data tempat tabel indeks dibuat untuk mendapatkan kolom atribut tersebut.
Baca satu baris data
Anda dapat memanggil operasi GetRow untuk membaca satu baris data. Untuk informasi lebih lanjut, lihat Baca satu baris data.
Parameter
Saat memanggil operasi GetRow untuk membaca data dari tabel indeks, perhatikan hal-hal berikut:
Atur parameter TableName ke nama tabel indeks.
Tablestore secara otomatis menambahkan kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks ke tabel indeks sebagai kolom kunci utama tabel indeks. Oleh karena itu, saat menentukan kolom kunci utama sebuah baris dalam tabel indeks, Anda harus menentukan kolom indeks berdasarkan mana tabel indeks dibuat serta kolom kunci utama dari tabel data.
Contoh
Kode sampel berikut menunjukkan cara membaca baris data dalam tabel indeks berdasarkan kunci utama baris:
func GetRowFromIndex(client *tablestore.TableStoreClient, indexName string) {
getRowRequest := new(tablestore.GetRowRequest)
criteria := new(tablestore.SingleRowQueryCriteria);
// Buat kunci utama. Jika Anda ingin membaca data dari indeks sekunder lokal, kolom kunci utama pertama dari tabel indeks harus sama dengan kolom kunci utama pertama dari tabel data.
putPk := new(tablestore.PrimaryKey)
putPk.AddPrimaryKeyColumn("definedcol1", "value1")
putPk.AddPrimaryKeyColumn("pk1", int64(2))
putPk.AddPrimaryKeyColumn("pk2", []byte("pk2"))
criteria.PrimaryKey = putPk
getRowRequest.SingleRowQueryCriteria = criteria
getRowRequest.SingleRowQueryCriteria.TableName = indexName
getRowRequest.SingleRowQueryCriteria.MaxVersion = 1
getResp, err := client.GetRow(getRowRequest)
if err != nil {
fmt.Println("getrow gagal dengan kesalahan:", err)
} else {
fmt.Println("dapatkan baris", getResp.Columns[0].ColumnName,"hasilnya adalah ", getResp.Columns[0].Value,)
}
}Baca data yang nilai kunci utamanya berada dalam rentang tertentu
Anda dapat memanggil operasi GetRange untuk membaca data yang nilai kunci utamanya berada dalam rentang tertentu. Untuk informasi lebih lanjut, lihat Baca data yang nilai kunci utamanya berada dalam rentang tertentu.
Parameter
Saat memanggil operasi GetRange untuk membaca data dari tabel indeks, perhatikan hal-hal berikut:
Atur parameter TableName ke nama tabel indeks.
Tablestore secara otomatis menambahkan kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks ke tabel indeks sebagai kolom kunci utama tabel indeks. Oleh karena itu, saat menentukan kunci utama awal dan akhir dari rentang yang ingin ditanyakan, Anda harus menentukan kolom indeks berdasarkan mana tabel indeks dibuat serta kolom kunci utama dari tabel data.
Contoh
Gunakan indeks sekunder global
Kode sampel berikut menunjukkan cara membaca data yang nilai kunci utamanya berada dalam rentang tertentu dari indeks sekunder global. Dalam contoh ini, kolom kunci utama pertama dari indeks sekunder global adalah definedcol1. Nilai yang ditentukan untuk kolom definedcol1 untuk rentang adalah value1.
func GetRangeFromGlobalIndex(client *tablestore.TableStoreClient, indexName string) {
getRangeRequest := &tablestore.GetRangeRequest{}
rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
rangeRowQueryCriteria.TableName = indexName
// Buat kunci utama awal dari rentang. Rentang nilai kunci utama adalah interval tertutup-kiri, terbuka-kanan.
startPK := new(tablestore.PrimaryKey)
// Tentukan nilai untuk kolom kunci utama pertama.
startPK.AddPrimaryKeyColumn("definedcol1", "value1")
// Tentukan nilai untuk kolom kunci utama kedua. Kolom kunci utama kedua adalah kolom kunci utama dari tabel data yang tidak digunakan sebagai kolom indeks dari indeks sekunder global.
startPK.AddPrimaryKeyColumnWithMinValue("pk1")
// Tentukan nilai untuk kolom kunci utama ketiga. Kolom kunci utama ketiga adalah kolom kunci utama dari tabel data yang tidak digunakan sebagai kolom indeks dari indeks sekunder global.
startPK.AddPrimaryKeyColumnWithMinValue("pk2")
endPK := new(tablestore.PrimaryKey)
endPK.AddPrimaryKeyColumn("definedcol1", "value1")
endPK.AddPrimaryKeyColumnWithMaxValue("pk1")
endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
rangeRowQueryCriteria.StartPrimaryKey = startPK
rangeRowQueryCriteria.EndPrimaryKey = endPK
rangeRowQueryCriteria.Direction = tablestore.FORWARD
rangeRowQueryCriteria.MaxVersion = 1
rangeRowQueryCriteria.Limit = 10
getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria
getRangeResp, err := client.GetRange(getRangeRequest)
fmt.Println("hasil jangkauan adalah ", getRangeResp)
for {
if err != nil {
fmt.Println("jangkauan gagal dengan kesalahan:", err)
}
if len(getRangeResp.Rows) > 0 {
for _, row := range getRangeResp.Rows {
fmt.Println("jangkauan dapatkan baris dengan kunci", row.PrimaryKey.PrimaryKeys[0].Value, row.PrimaryKey.PrimaryKeys[1].Value, row.PrimaryKey.PrimaryKeys[2].Value)
}
if getRangeResp.NextStartPrimaryKey == nil {
break
} else {
fmt.Println("pk berikutnya adalah :", getRangeResp.NextStartPrimaryKey.PrimaryKeys[0].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[1].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[2].Value)
getRangeRequest.RangeRowQueryCriteria.StartPrimaryKey = getRangeResp.NextStartPrimaryKey
getRangeResp, err = client.GetRange(getRangeRequest)
}
} else {
break
}
fmt.Println("lanjutkan untuk menanyakan baris")
}
fmt.Println("getrow selesai")
}Gunakan indeks sekunder lokal
Kode sampel berikut menunjukkan cara membaca data semua baris dari indeks sekunder lokal:
func GetRangeFromLocalIndex(client *tablestore.TableStoreClient, indexName string) {
getRangeRequest := &tablestore.GetRangeRequest{}
rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
rangeRowQueryCriteria.TableName = indexName
// Buat kunci utama awal dari rentang. Rentang nilai kunci utama adalah interval tertutup-kiri, terbuka-kanan.
startPK := new(tablestore.PrimaryKey)
// Tentukan nilai untuk kolom kunci utama pertama.
startPK.AddPrimaryKeyColumnWithMinValue("pk1")
// Tentukan nilai untuk kolom kunci utama kedua.
startPK.AddPrimaryKeyColumnWithMinValue("definedcol1")
// Tentukan nilai untuk kolom kunci utama ketiga. Kolom kunci utama ketiga adalah kolom kunci utama dari tabel data yang tidak digunakan sebagai kolom indeks dari indeks sekunder global.
startPK.AddPrimaryKeyColumnWithMinValue("pk2")
// Buat kunci utama akhir dari rentang.
endPK := new(tablestore.PrimaryKey)
endPK.AddPrimaryKeyColumnWithMaxValue("pk1")
endPK.AddPrimaryKeyColumnWithMaxValue("definedcol1")
endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
rangeRowQueryCriteria.StartPrimaryKey = startPK
rangeRowQueryCriteria.EndPrimaryKey = endPK
rangeRowQueryCriteria.Direction = tablestore.FORWARD
rangeRowQueryCriteria.MaxVersion = 1
rangeRowQueryCriteria.Limit = 10
getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria
getRangeResp, err := client.GetRange(getRangeRequest)
fmt.Println("hasil jangkauan adalah ", getRangeResp)
for {
if err != nil {
fmt.Println("jangkauan gagal dengan kesalahan:", err)
}
if len(getRangeResp.Rows) > 0 {
for _, row := range getRangeResp.Rows {
fmt.Println("jangkauan dapatkan baris dengan kunci", row.PrimaryKey.PrimaryKeys[0].Value, row.PrimaryKey.PrimaryKeys[1].Value, row.PrimaryKey.PrimaryKeys[2].Value)
// Untuk mengembalikan kolom atribut dari tabel indeks, tulis kode berdasarkan kode sampel berikut.
//fmt.Println("dapatkan baris", row.Columns[0].ColumnName, "hasilnya adalah ", row.Columns[0].Value)
}
if getRangeResp.NextStartPrimaryKey == nil {
break
} else {
fmt.Println("pk berikutnya adalah :", getRangeResp.NextStartPrimaryKey.PrimaryKeys[0].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[1].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[2].Value)
getRangeRequest.RangeRowQueryCriteria.StartPrimaryKey = getRangeResp.NextStartPrimaryKey
getRangeResp, err = client.GetRange(getRangeRequest)
}
} else {
break
}
fmt.Println("lanjutkan untuk menanyakan baris")
}
fmt.Println("getrow selesai")
}FAQ
Referensi
Jika bisnis Anda memerlukan kueri multi-dimensi dan analisis data, Anda dapat membuat indeks pencarian dan menentukan atribut yang diperlukan sebagai bidang dari indeks pencarian. Kemudian, Anda dapat menanyakan dan menganalisis data menggunakan indeks pencarian. Sebagai contoh, Anda dapat menggunakan indeks pencarian untuk melakukan kueri berdasarkan kolom non-kunci utama, kueri Boolean, dan kueri fuzzy. Anda juga dapat menggunakan indeks pencarian untuk mendapatkan nilai maksimum dan minimum, mengumpulkan statistik tentang jumlah baris, dan mengelompokkan hasil kueri. Untuk informasi lebih lanjut, lihat Indeks pencarian.
Jika Anda ingin menjalankan pernyataan SQL untuk menanyakan dan menganalisis data, Anda dapat menggunakan fitur kueri SQL. Untuk informasi lebih lanjut, lihat Kueri SQL.