Tablestore menyediakan operasi untuk membaca data dari tabel: baca satu baris, baca beberapa baris secara batch, pindai rentang kunci primer, atau iterasi melalui rentang menggunakan iterator.
Metode kueri
Tablestore menyediakan tiga operasi untuk membaca data: GetRow, BatchGetRow, dan GetRange. Pilih operasi yang sesuai berdasarkan skenario kueri Anda.
Untuk membaca dari tabel yang memiliki kolom kunci utama auto-increment, Anda harus terlebih dahulu mengambil semua nilai kolom kunci utama, termasuk nilai auto-increment tersebut. Untuk informasi lebih lanjut, lihat Kolom kunci utama auto-increment. Jika nilai auto-increment tidak tersedia, gunakan GetRange untuk memindai berdasarkan kolom kunci utama pertama.
|
Operasi |
Deskripsi |
Kapan Digunakan |
|
Membaca satu baris berdasarkan kunci primernya menggunakan operasi GetRow. |
Semua kolom kunci utama diketahui dan Anda perlu membaca jumlah baris yang sedikit. |
|
|
Membaca beberapa baris dari satu atau beberapa tabel dalam satu panggilan menggunakan operasi BatchGetRow. Setiap baris dibaca secara independen dan mengembalikan hasilnya sendiri. |
Semua kolom kunci utama diketahui dan Anda perlu membaca jumlah baris yang besar, atau membaca dari beberapa tabel. |
|
|
Baca data yang nilai kunci primernya berada dalam rentang tertentu |
Memindai baris-baris yang nilai kunci primernya berada dalam rentang tertentu menggunakan operasi GetRange. Mendukung pemindaian maju dan mundur, batas jumlah baris, serta paginasi otomatis melalui |
Rentang nilai kunci utama atau awalan kunci utama dapat ditentukan. Penting
Jika tidak ada awalan yang diketahui, atur kunci awal ke INF_MIN dan kunci akhir ke INF_MAX untuk memindai seluruh tabel. Ini mengonsumsi sumber daya komputasi yang signifikan—lakukan dengan hati-hati. |
|
Baca data yang nilai kunci primernya berada dalam rentang tertentu menggunakan iterator |
Membaca baris-baris dalam rentang kunci utama menggunakan iterator, yang menangani paginasi secara otomatis. |
Rentang kunci utama atau awalan dapat ditentukan, dan Anda ingin melakukan iterasi atas hasil tanpa mengelola paginasi secara manual. |
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menginisialisasi instans OTSClient. Untuk informasi lebih lanjut, lihat Inisialisasi instans OTSClient.
Tabel data dibuat dengan menuliskan data ke dalamnya. Untuk informasi lebih lanjut, lihat Membuat tabel data dan Menulis data.
Baca satu baris data
Panggil operasi GetRow untuk membaca satu baris berdasarkan kunci primernya.
Operasi API
/// <summary>
/// Baca satu baris berdasarkan kunci utama yang ditentukan.
/// </summary>
/// <param name="request">Permintaan kueri data</param>
/// <returns>Respons GetRow</returns>
public GetRowResponse GetRow(GetRowRequest request);
/// <summary>
/// Versi asinkron dari GetRow.
/// </summary>
public Task<GetRowResponse> GetRowAsync(GetRowRequest request);
Parameter
|
Parameter |
Deskripsi |
|
tableName |
Nama tabel. |
|
primaryKey |
Kunci utama baris yang akan dibaca, ditentukan sebagai nama kolom, tipe, dan nilai. Penting
Jumlah dan tipe kolom kunci utama harus sesuai persis dengan skema tabel. |
|
columnsToGet |
Kolom-kolom yang akan dikembalikan—kolom kunci utama atau kolom atribut. Jika diabaikan, semua kolom dikembalikan.
Catatan
|
|
maxVersions |
Jumlah maksimum versi data yang akan dikembalikan. Penting
Tentukan setidaknya salah satu dari
|
|
timeRange |
Rentang waktu versi atau versi spesifik yang akan dibaca. Untuk informasi lebih lanjut, lihat TimeRange. Penting
Tentukan setidaknya salah satu dari
Hanya salah satu dari Rentang valid: 0 hingga |
|
filter |
Filter sisi server yang diterapkan setelah pengambilan data. Hanya baris-baris yang memenuhi kondisi filter yang dikembalikan. Untuk informasi lebih lanjut, lihat Gunakan filter. Catatan
Jika |
Kode contoh
Baca satu baris data
Kode contoh berikut memberikan contoh cara membaca satu baris data:
// Tentukan kunci utama. Kolom dan tipe harus sesuai dengan skema tabel.
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
try
{
// Bangun permintaan. Mengabaikan columnsToGet mengembalikan seluruh baris.
var request = new GetRowRequest(TableName, primaryKey);
// Panggil GetRow.
var response = otsClient.GetRow(request);
// Proses data baris yang dikembalikan.
// (Diabaikan di sini—lihat contoh GitHub untuk implementasi lengkap.)
Console.WriteLine("Get row berhasil.");
}
catch (Exception ex)
{
Console.WriteLine("Update table gagal, exception:{0}", ex.Message);
}
Untuk melihat kode contoh lengkap, kunjungi GetRow@GitHub.
Baca satu baris data menggunakan filter
Contoh berikut membaca col0 dan col1 dan hanya mengembalikan baris jika nilai col0 adalah 5 atau nilai col1 bukan ff.
// Tentukan kunci utama. Kolom dan tipe harus sesuai dengan skema tabel.
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
var rowQueryCriteria = new SingleRowQueryCriteria("SampleTable");
rowQueryCriteria.RowPrimaryKey = primaryKey;
// Kondisi 1: col0 == 5
var filter1 = new RelationalCondition("col0",
RelationalCondition.CompareOperator.EQUAL,
new ColumnValue(5));
// Kondisi 2: col1 != "ff"
var filter2 = new RelationalCondition("col1", RelationalCondition.CompareOperator.NOT_EQUAL, new ColumnValue("ff"));
// Gabungkan dengan OR: kembalikan baris jika salah satu kondisi terpenuhi.
var filter = new CompositeCondition(CompositeCondition.LogicOperator.OR);
filter.AddCondition(filter1);
filter.AddCondition(filter2);
rowQueryCriteria.Filter = filter;
// Ambil hanya col0 dan col1, lalu terapkan filter.
rowQueryCriteria.AddColumnsToGet("col0");
rowQueryCriteria.AddColumnsToGet("col1");
var request = new GetRowRequest(rowQueryCriteria);
try
{
var response = otsClient.GetRow(request);
// Proses data baris yang dikembalikan.
// (Diabaikan di sini—lihat contoh GitHub untuk implementasi lengkap.)
Console.WriteLine("Get row dengan filter berhasil.");
}
catch (Exception ex)
{
Console.WriteLine("Get row dengan filter gagal, exception:{0}", ex.Message);
}
Untuk melihat kode contoh lengkap, kunjungi GetRowWithFilter@GitHub.
Baca beberapa baris data sekaligus
Panggil operasi BatchGetRow untuk membaca beberapa baris dari satu atau beberapa tabel dalam satu permintaan. Setiap baris diproses sebagai panggilan GetRow independen—Tablestore mengembalikan hasil terpisah untuk setiap baris.
Catatan penggunaan
Beberapa baris dalam permintaan batch mungkin gagal secara individual. Kesalahan untuk baris-baris tersebut muncul dalam BatchGetRowResponse, bukan sebagai exception yang dilempar. Selalu periksa respons untuk memastikan setiap baris berhasil dibaca.
Parameter yang sama berlaku untuk semua baris dalam permintaan. Misalnya, mengatur
ColumnsToGet=[colA]hanya membacacolAdari setiap baris.Satu permintaan BatchGetRow dapat membaca maksimal 100 baris.
Operasi API
/// <summary>
/// Baca beberapa baris dari satu atau beberapa tabel dalam satu panggilan.
/// Setiap baris dibaca dan ditagih secara independen, tetapi batching mengurangi
/// overhead round-trip dibandingkan dengan beberapa panggilan GetRow.
/// </summary>
/// <param name="request">Instans permintaan</param>
/// <returns>Instans respons</returns>
public BatchGetRowResponse BatchGetRow(BatchGetRowRequest request);
/// <summary>
/// Versi asinkron dari BatchGetRow.
/// </summary>
public Task<BatchGetRowResponse> BatchGetRowAsync(BatchGetRowRequest request);
Kode contoh
Contoh berikut membaca 10 baris dalam satu panggilan BatchGetRow:
// Bangun kunci utama untuk 10 baris.
List<PrimaryKey> primaryKeys = new List<PrimaryKey>();
for (int i = 0; i < 10; i++)
{
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
primaryKeys.Add(primaryKey);
}
try
{
BatchGetRowRequest request = new BatchGetRowRequest();
request.Add(TableName, primaryKeys);
var response = otsClient.BatchGetRow(request);
var tableRows = response.RowDataGroupByTable;
var rows = tableRows[TableName];
// Periksa hasil setiap baris secara individual—beberapa baris mungkin gagal.
// (Diabaikan di sini—lihat contoh GitHub untuk implementasi lengkap.)
}
catch (Exception ex)
{
Console.WriteLine("Batch get row gagal, exception:{0}", ex.Message);
}
Untuk melihat kode contoh lengkap, kunjungi BatchGetRow@GitHub.
Baca data yang nilai kunci primernya berada dalam rentang tertentu
Panggil operasi GetRange untuk memindai baris-baris yang nilai kunci primernya berada dalam rentang tertentu. Pemindaian dapat dilakukan maju atau mundur, dan Anda dapat membatasi jumlah baris yang dikembalikan. Jika pemindaian mencapai batas (volume data, jumlah baris, atau throughput terpesan), pemindaian berhenti lebih awal dan mengembalikan nilai nextStartPrimaryKey. Gunakan nilai tersebut sebagai kunci awal dalam permintaan lanjutan untuk membaca baris-baris yang tersisa.
Semua baris dalam tabel Tablestore diurutkan berdasarkan kunci utama komposit lengkapnya, bukan berdasarkan kolom kunci utama individual mana pun.
Catatan penggunaan
GetRange menggunakan prinsip pencocokan paling kiri: Tablestore membandingkan nilai kolom kunci utama dari kiri ke kanan. Ketika nilai baris untuk kolom kunci utama pertama (PK1) berada dalam rentang yang ditentukan, baris tersebut dikembalikan tanpa mengevaluasi kolom selanjutnya. Ketika PK1 berada di luar rentang, Tablestore melanjutkan evaluasi kolom yang tersisa dengan cara yang sama.
Operasi GetRange berhenti lebih awal ketika salah satu batas berikut tercapai:
Data yang dipindai mencapai 4 MB.
Jumlah baris yang dipindai mencapai 5.000.
Jumlah baris yang dikembalikan mencapai
limityang ditentukan.Throughput baca terpesan habis sebelum baris berikutnya dapat dibaca.
Operasi API
/// <summary>
/// Baca baris-baris yang nilai kunci primernya berada dalam rentang yang ditentukan.
/// </summary>
/// <param name="request">Instans permintaan</param>
/// <returns>Instans respons</returns>
public GetRangeResponse GetRange(GetRangeRequest request);
/// <summary>
/// Versi asinkron dari GetRange.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<GetRangeResponse> GetRangeAsync(GetRangeRequest request);
Parameter
|
Parameter |
Deskripsi |
|
tableName |
Nama tabel. |
|
direction |
Arah pemindaian.
Misalnya, diberikan nilai kunci utama A dan B di mana A < B: mengatur direction ke FORWARD dengan rentang |
|
inclusiveStartPrimaryKey |
Kunci utama awal dan akhir dari rentang tersebut. Keduanya harus berupa kolom kunci utama yang valid, atau kolom virtual bertipe INF_MIN atau INF_MAX. Jumlah kolom harus sesuai dengan skema kunci utama tabel. INF_MIN lebih kecil daripada semua nilai lainnya. INF_MAX lebih besar daripada semua nilai lainnya.
Rentang tersebut merupakan interval tertutup di kiri dan terbuka di kanan. Dalam arah maju, baris dengan kunci ≥ awal dan < akhir dikembalikan. |
|
exclusiveEndPrimaryKey |
|
|
limit |
Jumlah maksimum baris yang akan dikembalikan. Harus lebih besar dari 0. Ketika batas tercapai, pemindaian berhenti dan mengembalikan |
|
columnsToGet |
Kolom-kolom yang akan dikembalikan—kolom kunci utama atau kolom atribut. Jika diabaikan, semua kolom dikembalikan.
Catatan
|
|
maxVersions |
Jumlah maksimum versi data yang akan dikembalikan. Penting
Tentukan setidaknya salah satu dari
|
|
timeRange |
Rentang waktu versi atau versi spesifik yang akan dibaca. Untuk informasi lebih lanjut, lihat TimeRange. Penting
Tentukan setidaknya salah satu dari
Hanya salah satu dari Rentang valid: 0 hingga |
|
filter |
Filter sisi server yang diterapkan setelah pengambilan data. Hanya baris-baris yang memenuhi kondisi filter yang dikembalikan. Untuk informasi lebih lanjut, lihat Konfigurasi filter. Catatan
Jika |
|
nextStartPrimaryKey |
Kunci awal untuk permintaan baca berikutnya, dikembalikan ketika respons dipaginasi.
|
Kode contoh
Contoh berikut memindai semua baris dengan nilai kunci utama antara (0, INF_MIN) dan (100, INF_MAX), menangani paginasi secara otomatis:
// Tentukan rentang kunci: pk0 dari 0 (inklusif) hingga 100 (eksklusif).
var inclusiveStartPrimaryKey = new PrimaryKey();
inclusiveStartPrimaryKey.Add("pk0", new ColumnValue(0));
inclusiveStartPrimaryKey.Add("pk1", ColumnValue.INF_MIN);
var exclusiveEndPrimaryKey = new PrimaryKey();
exclusiveEndPrimaryKey.Add("pk0", new ColumnValue(100));
exclusiveEndPrimaryKey.Add("pk1", ColumnValue.INF_MAX);
try
{
var request = new GetRangeRequest(TableName, GetRangeDirection.Forward,
inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
var response = otsClient.GetRange(request);
// Kumpulkan semua baris, lakukan paginasi hingga nextStartPrimaryKey null.
var rows = response.RowDataList;
var nextStartPrimaryKey = response.NextPrimaryKey;
while (nextStartPrimaryKey != null)
{
request = new GetRangeRequest(TableName, GetRangeDirection.Forward,
nextStartPrimaryKey, exclusiveEndPrimaryKey);
response = otsClient.GetRange(request);
nextStartPrimaryKey = response.NextPrimaryKey;
foreach (RowDataFromGetRange row in response.RowDataList)
{
rows.Add(row);
}
}
// Proses semua baris yang dikumpulkan.
// (Diabaikan di sini—lihat contoh GitHub untuk implementasi lengkap.)
Console.WriteLine("Get range berhasil");
}
catch (Exception ex)
{
Console.WriteLine("Get range gagal, exception:{0}", ex.Message);
}
Untuk melihat kode contoh lengkap, kunjungi GetRange@GitHub.
Baca data yang nilai kunci primernya berada dalam rentang tertentu menggunakan iterator
Panggil operasi GetRangeIterator untuk memindai rentang kunci utama menggunakan iterator. Berbeda dengan GetRange, iterator menangani paginasi secara otomatis—tidak perlu memeriksa nextStartPrimaryKey dan mengeluarkan permintaan lanjutan secara manual.
Operasi API
/// <summary>
/// Pindai baris-baris yang nilai kunci primernya berada dalam rentang yang ditentukan.
/// Mengembalikan iterator yang menghasilkan satu baris dalam satu waktu, menangani paginasi secara internal.
/// </summary>
/// <param name="request"><see cref="GetIteratorRequest"/></param>
/// <returns>Iterator dari <see cref="RowDataFromGetRange"/>.</returns>
public IEnumerable<RowDataFromGetRange> GetRangeIterator(GetIteratorRequest request);
Kode contoh
Contoh berikut membaca semua baris dengan nilai kunci utama antara (0, "a") dan (1000, "xyz"):
PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey();
inclusiveStartPrimaryKey.Add("pk0", new ColumnValue(0));
inclusiveStartPrimaryKey.Add("pk1", new ColumnValue("a"));
PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey();
exclusiveEndPrimaryKey.Add("pk0", new ColumnValue(1000));
exclusiveEndPrimaryKey.Add("pk1", new ColumnValue("xyz"));
// Lacak unit kapasitas yang dikonsumsi selama iterasi.
var cu = new CapacityUnit(0, 0);
try
{
// Filter didukung pada GetIteratorRequest.
var request = new GetIteratorRequest(TableName, GetRangeDirection.Forward, inclusiveStartPrimaryKey,
exclusiveEndPrimaryKey, cu);
var iterator = otsClient.GetRangeIterator(request);
foreach (var row in iterator)
{
// Proses setiap baris.
}
Console.WriteLine("Iterasi baris berhasil");
}
catch (Exception ex)
{
Console.WriteLine("Iterasi baris gagal, exception:{0}", ex.Message);
}
Untuk melihat kode contoh lengkap, kunjungi GetRangeIterator@GitHub.