全部产品
Search
文档中心

Tablestore:Baca data yang nilai kunci primernya berada dalam rentang tertentu

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan Tablestore SDK for Java untuk membaca data dengan nilai kunci primer dalam rentang tertentu dari Tablestore.

Prasyarat

Klien harus diinisialisasi terlebih dahulu. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.

Deskripsi metode

public GetRangeResponse getRange(GetRangeRequest getRangeRequest) throws TableStoreException, ClientException

Parameter GetRangeRequest

  • rangeRowQueryCriteria (wajib) RangeRowQueryCriteria: Informasi tentang operasi pembacaan rentang, mencakup parameter berikut.

    Parameter

    Tipe

    Deskripsi

    tableName (wajib)

    String

    Nama tabel data.

    inclusiveStartPrimaryKey (wajib)

    PrimaryKey

    Informasi tentang kunci primer awal, termasuk nama kolom kunci primer dan nilai kolom kunci primer.

    • Respon termasuk kolom kunci primer awal.

    • Jumlah dan tipe kolom kunci primer yang Anda tentukan harus sesuai dengan jumlah dan tipe kolom kunci primer tabel.

    • Saat membaca data ke arah maju, kunci primer awal harus lebih kecil dari kunci primer akhir.

    • Saat membaca data ke arah mundur, kunci primer awal harus lebih besar dari kunci primer akhir.

    • PrimaryKeyValue.INF_MIN menunjukkan nilai minimum. PrimaryKeyValue.INF_MAX menunjukkan nilai maksimum.

    exclusiveEndPrimaryKey (wajib)

    PrimaryKey

    Informasi tentang kunci primer akhir, termasuk nama kolom kunci primer dan nilai kolom kunci primer.

    • Respon tidak termasuk kunci primer akhir.

    • Jumlah dan tipe kolom kunci primer yang Anda tentukan harus sesuai dengan jumlah dan tipe kolom kunci primer tabel.

    • PrimaryKeyValue.INF_MIN menunjukkan nilai minimum. PrimaryKeyValue.INF_MAX menunjukkan nilai maksimum.

    direction (opsional)

    Direction

    Arah pembacaan data.

    • FORWARD: membaca data ke arah maju. Ini adalah nilai default.

    • BACKWARD: membaca data ke arah mundur.

    maxVersions (opsional)

    OptionalValue<Integer>

    Jumlah maksimum versi.

    • Anda harus menentukan jumlah maksimum versi atau rentang versi.

    • Jika jumlah versi yang memenuhi kondisi query melebihi jumlah maksimum versi yang ditentukan, sejumlah versi data akan dikembalikan dalam urutan menurun nomor versi.

    timeRange (opsional)

    OptionalValue<TimeRange>

    Rentang versi untuk dibaca.

    • Anda harus menentukan jumlah maksimum versi atau rentang versi.

    • Setiap kolom atribut dalam tabel data Tablestore dapat memiliki beberapa versi. Setelah Anda menentukan rentang versi, hanya data dalam rentang versi tersebut yang dikembalikan.

    limit (opsional)

    int

    Jumlah maksimum baris yang dikembalikan dalam satu operasi. Nilai harus lebih besar dari 0. Jika jumlah baris yang memenuhi kondisi query melebihi nilai yang ditentukan, jumlah maksimum baris dan nilai kunci primer untuk query berikutnya dikembalikan.

    columnsToGet (opsional)

    Set<String>

    Kolom yang akan dibaca, yang bisa berupa kolom kunci primer atau kolom atribut.

    • Jika columnsToGet tidak ditentukan, seluruh baris dikembalikan.

    • Jika columnsToGet ditentukan dan baris tidak mengandung salah satu kolom yang ditentukan, baris tersebut tidak dikembalikan.

    filter (opsional)

    OptionalValue<Filter>

    Kondisi filter. Untuk informasi lebih lanjut, lihat Konfigurasikan filter.

    • Jika baik columnsToGet maupun filter ditentukan, baris difilter berdasarkan kondisi yang ditentukan oleh columnsToGet, lalu difilter berdasarkan kondisi filter.

Kode contoh

Contoh kode berikut membaca data dari tabel test_table, di mana nilai kunci primer lebih besar dari row1.

public static void getRangeExample(SyncClient client) {
    // Konstruksi kondisi query.
    RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
    // Tentukan kunci primer awal untuk query.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
    // Tentukan kunci primer akhir. Hasil tidak termasuk kunci primer akhir.
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
    rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
    // Tentukan versi yang ingin Anda query.
    rangeRowQueryCriteria.setMaxVersions(1);

    // Panggil metode getRange untuk query data.
    GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
    GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);

    // Kembalikan hasil.
    System.out.println("RequestId: " + getRangeResponse.getRequestId());
    System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
    System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
    for(Row row : getRangeResponse.getRows())
        System.out.println(row);
}

Jumlah maksimum data yang dapat dipindai dalam satu operasi pembacaan rentang adalah 5.000 baris atau 4 MB. Jika batas tersebut terlampaui, nilai kunci primer untuk operasi baca berikutnya akan dikembalikan. Anda dapat merujuk pada kode berikut untuk query iteratif.

while(true) {
    GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
    GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);

    // Kembalikan hasil.
    System.out.println("RequestId: " + getRangeResponse.getRequestId());
    System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
    System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
    for(Row row : getRangeResponse.getRows())
        System.out.println(row);
    System.out.println("Jumlah Baris: " + getRangeResponse.getRows().size());

    // Tentukan kunci primer awal untuk operasi baca berikutnya.
    if(getRangeResponse.getNextStartPrimaryKey() != null)
        rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
    else break;
}

Anda juga dapat merujuk pada contoh kode berikut untuk mengonfigurasi pengaturan berikut saat melakukan query data:

  • Tentukan arah pembacaan data.

    // Tentukan bahwa data dibaca dalam arah mundur.
    rangeRowQueryCriteria.setDirection(Direction.BACKWARD);
    // Tentukan kunci primer awal. Saat Anda membaca data dalam arah mundur, kunci primer awal harus lebih besar dari kunci primer akhir.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
    rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
    // Tentukan kunci primer akhir. Hasil tidak termasuk kunci primer akhir.
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
  • Tentukan rentang versi data untuk dibaca. Hanya data dalam rentang versi tersebut yang akan dikembalikan.

    // Tentukan rentang versi data untuk query menjadi satu hari sebelum waktu saat ini.
    rangeRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
  • Tentukan kolom atribut untuk dibaca.

    rangeRowQueryCriteria.addColumnsToGet("col2");
  • Tentukan jumlah maksimum baris yang dikembalikan dalam satu operasi.

    rangeRowQueryCriteria.setLimit(10);

Referensi