All Products
Search
Document Center

Tablestore:Baca data

Last Updated:Apr 30, 2026

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.

Penting

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

Baca satu baris data

Membaca satu baris berdasarkan kunci primernya menggunakan operasi GetRow.

Semua kolom kunci utama diketahui dan Anda perlu membaca jumlah baris yang sedikit.

Baca beberapa baris data sekaligus

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 nextStartPrimaryKey.

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:

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.

  • Jika tidak ditentukan, semua data dalam baris dikembalikan.

  • Jika kolom yang ditentukan tidak ada dalam baris, null dikembalikan untuk kolom tersebut. Jika hanya sebagian kolom yang ditentukan tersedia, hanya nilai-nilai yang tersedia yang dikembalikan.

Catatan
  • Secara default, semua kolom dikembalikan. Gunakan columnsToGet untuk membatasi respons hanya pada kolom tertentu. Misalnya, menambahkan col0 dan col1 hanya mengembalikan dua kolom tersebut.

  • Jika columnsToGet dan filter keduanya diatur, Tablestore terlebih dahulu mengambil kolom yang ditentukan, lalu menerapkan filter.

maxVersions

Jumlah maksimum versi data yang akan dikembalikan.

Penting

Tentukan setidaknya salah satu dari maxVersions atau timeRange.

  • Hanya maxVersions: mengembalikan jumlah versi yang ditentukan, dari yang terbaru ke yang terlama.

  • Hanya timeRange: mengembalikan semua versi dalam rentang waktu yang ditentukan, atau versi pada timestamp tertentu.

  • Keduanya ditentukan: mengembalikan hingga maxVersions versi dalam rentang waktu, dari yang terbaru ke yang terlama.

timeRange

Rentang waktu versi atau versi spesifik yang akan dibaca. Untuk informasi lebih lanjut, lihat TimeRange.

Penting

Tentukan setidaknya salah satu dari maxVersions atau timeRange.

  • Hanya maxVersions: mengembalikan jumlah versi yang ditentukan, dari yang terbaru ke yang terlama.

  • Hanya timeRange: mengembalikan semua versi dalam rentang waktu yang ditentukan, atau versi pada timestamp tertentu.

  • Keduanya ditentukan: mengembalikan hingga maxVersions versi dalam rentang waktu, dari yang terbaru ke yang terlama.

  • Untuk mengkueri rentang versi, atur start_time dan end_time. Rentang tersebut merupakan interval tertutup di kiri dan terbuka di kanan: [start_time, end_time).

  • Untuk mengkueri versi tertentu, atur specific_time ke timestamp yang tepat.

Hanya salah satu dari specific_time atau [start_time, end_time) yang diperlukan.

Rentang valid: 0 hingga Int64.MaxValue, dalam milidetik.

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 columnsToGet dan filter keduanya diatur, Tablestore terlebih dahulu mengambil kolom yang ditentukan, lalu menerapkan filter.

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 membaca colA dari 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.

Catatan

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 limit yang 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.

  • FORWARD: kunci awal harus lebih kecil dari kunci akhir; baris dikembalikan dalam urutan menaik.

  • BACKWARD: kunci awal harus lebih besar dari kunci akhir; baris dikembalikan dalam urutan menurun.

Misalnya, diberikan nilai kunci utama A dan B di mana A < B: mengatur direction ke FORWARD dengan rentang [A, B) mengembalikan baris dengan kunci ≥ A dan < B dalam urutan menaik. Mengatur direction ke BACKWARD dengan rentang [B, A) mengembalikan baris dengan kunci ≤ B dan > A dalam urutan menurun.

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.

  • inclusiveStartPrimaryKey: baris dengan kunci ini disertakan dalam hasil.

  • exclusiveEndPrimaryKey: baris dengan kunci ini tidak disertakan dalam hasil.

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 nextStartPrimaryKey. Gunakan nilai tersebut sebagai kunci awal dalam permintaan berikutnya untuk melanjutkan pembacaan.

columnsToGet

Kolom-kolom yang akan dikembalikan—kolom kunci utama atau kolom atribut. Jika diabaikan, semua kolom dikembalikan.

  • Jika tidak ditentukan, semua data dalam baris dikembalikan.

  • Jika kolom yang ditentukan tidak ada dalam baris, null dikembalikan untuk kolom tersebut. Jika hanya sebagian kolom yang ditentukan tersedia, hanya nilai-nilai yang tersedia yang dikembalikan.

Catatan
  • Secara default, semua kolom dikembalikan. Gunakan columnsToGet untuk membatasi respons hanya pada kolom tertentu. Misalnya, menambahkan col0 dan col1 hanya mengembalikan dua kolom tersebut.

  • Jika baris dalam rentang tidak berisi salah satu kolom yang ditentukan, baris tersebut tidak disertakan dalam respons.

  • Jika columnsToGet dan filter keduanya diatur, Tablestore terlebih dahulu mengambil kolom yang ditentukan, lalu menerapkan filter.

maxVersions

Jumlah maksimum versi data yang akan dikembalikan.

Penting

Tentukan setidaknya salah satu dari maxVersions atau timeRange.

  • Hanya maxVersions: mengembalikan jumlah versi yang ditentukan, dari yang terbaru ke yang terlama.

  • Hanya timeRange: mengembalikan semua versi dalam rentang waktu yang ditentukan, atau versi pada timestamp tertentu.

  • Keduanya ditentukan: mengembalikan hingga maxVersions versi dalam rentang waktu, dari yang terbaru ke yang terlama.

timeRange

Rentang waktu versi atau versi spesifik yang akan dibaca. Untuk informasi lebih lanjut, lihat TimeRange.

Penting

Tentukan setidaknya salah satu dari maxVersions atau timeRange.

  • Hanya maxVersions: mengembalikan jumlah versi yang ditentukan, dari yang terbaru ke yang terlama.

  • Hanya timeRange: mengembalikan semua versi dalam rentang waktu yang ditentukan, atau versi pada timestamp tertentu.

  • Keduanya ditentukan: mengembalikan hingga maxVersions versi dalam rentang waktu, dari yang terbaru ke yang terlama.

  • Untuk mengkueri rentang versi, atur start_time dan end_time. Rentang tersebut merupakan interval tertutup di kiri dan terbuka di kanan: [start_time, end_time).

  • Untuk mengkueri versi tertentu, atur specific_time ke timestamp yang tepat.

Hanya salah satu dari specific_time atau [start_time, end_time) yang diperlukan.

Rentang valid: 0 hingga Int64.MaxValue, dalam milidetik.

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 columnsToGet dan filter keduanya diatur, Tablestore terlebih dahulu mengambil kolom yang ditentukan, lalu menerapkan filter.

nextStartPrimaryKey

Kunci awal untuk permintaan baca berikutnya, dikembalikan ketika respons dipaginasi.

  • Jika nextStartPrimaryKey tidak null, gunakan sebagai inclusiveStartPrimaryKey dalam permintaan GetRange berikutnya untuk melanjutkan pembacaan.

  • Jika nextStartPrimaryKey null, semua data dalam rentang telah dikembalikan.

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.