All Products
Search
Document Center

Tablestore:Baca baris dengan iterator

Last Updated:Aug 06, 2026

Tablestore SDK for Java memungkinkan pembacaan baris dalam rentang kunci primer menggunakan iterator dan secara otomatis mengambil batch berikutnya.

Prasyarat

Instal Tablestore SDK for Java dan inisialisasi klien.

Deskripsi

Panggil metode createRangeIterator untuk membuat iterator baris pada rentang kunci primer tertentu. Saat batch saat ini habis, iterator secara otomatis mengirim permintaan berikutnya, sehingga Anda tidak perlu melacak nextStartPrimaryKey atau melakukan loop terhadap getRange.

public Iterator<Row> createRangeIterator(RangeIteratorParameter rangeIteratorParameter) throws TableStoreException, ClientException

Contoh berikut melakukan iterasi maju melalui tabel range_iter_demo, dimulai dari kunci primer row1 hingga akhir tabel, serta mencetak setiap baris.

String tableName = "range_iter_demo";

RangeIteratorParameter parameter = new RangeIteratorParameter(tableName);

// Kunci primer awal (inklusif)
PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
parameter.setInclusiveStartPrimaryKey(startPkBuilder.build());

// Kunci primer akhir (eksklusif). INF_MAX membaca hingga akhir tabel.
PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
parameter.setExclusiveEndPrimaryKey(endPkBuilder.build());

parameter.setMaxVersions(1);

Iterator<Row> iterator = client.createRangeIterator(parameter);
int count = 0;
while (iterator.hasNext()) {
    Row row = iterator.next();
    System.out.println(row);
    count++;
}
System.out.println("Total baris yang diiterasi: " + count);

Parameter

Gunakan RangeIteratorParameter untuk menentukan kondisi kueri iterasi. Parameter tersebut dijelaskan di bawah ini.

Nama

Tipe

Deskripsi

tableName (wajib)

String

Nama tabel yang akan dibaca.

inclusiveStartPrimaryKey (wajib)

PrimaryKey

Kunci primer awal, termasuk nama dan nilai kolom kunci primer.

  • Data yang dikembalikan termasuk kunci primer awal.

  • Jumlah dan tipe kolom kunci primer harus sesuai dengan skema tabel.

  • Untuk iterasi maju, kunci primer awal harus lebih kecil daripada kunci primer akhir. Untuk iterasi mundur, kunci primer awal harus lebih besar daripada kunci primer akhir.

  • Gunakan PrimaryKeyValue.INF_MIN untuk negatif tak hingga dan PrimaryKeyValue.INF_MAX untuk positif tak hingga.

exclusiveEndPrimaryKey (wajib)

PrimaryKey

Kunci primer akhir, termasuk nama dan nilai kolom kunci primer.

  • Data yang dikembalikan tidak termasuk kunci primer akhir.

  • Jumlah dan tipe kolom kunci primer harus sesuai dengan skema tabel.

  • Gunakan PrimaryKeyValue.INF_MIN untuk negatif tak hingga dan PrimaryKeyValue.INF_MAX untuk positif tak hingga.

direction (opsional)

Direction

Arah pembacaan.

  • FORWARD: nilai default. Melakukan iterasi maju.

  • BACKWARD: melakukan iterasi mundur.

maxVersions (opsional)

OptionalValue<Integer>

Jumlah maksimum versi yang dikembalikan per kolom atribut. Anda harus menetapkan minimal salah satu dari maxVersions dan timeRange.

Jika jumlah versi yang sesuai melebihi batas maksimum ini, Tablestore mengembalikan versi terbaru dalam urutan dari terbaru ke terlama, hingga mencapai jumlah maksimum tersebut.

timeRange (opsional)

OptionalValue<TimeRange>

Rentang versi. Anda harus menetapkan minimal salah satu dari maxVersions dan timeRange.

Setiap kolom atribut dapat menyimpan beberapa versi. Menetapkan rentang versi hanya mengembalikan data dalam rentang tersebut.

maxCount (opsional)

int

Jumlah maksimum total baris yang dikembalikan oleh iterator. Harus lebih besar dari 0.

bufferSize (opsional)

int

Jumlah baris yang diambil per permintaan dasar. Harus lebih besar dari 0.

Kurangi nilai ini untuk mengurangi penggunaan memori puncak selama Pemindaian besar. Saat batch saat ini habis, iterator secara otomatis meminta batch berikutnya mulai dari posisi terakhir.

columnsToGet (opsional)

Set<String>

Kolom yang akan dibaca. Dapat berupa kolom kunci primer atau kolom atribut.

  • Jika columnsToGet tidak ditetapkan, seluruh baris dikembalikan.

  • Jika columnsToGet ditetapkan dan suatu baris tidak memiliki kolom yang ditentukan, null dikembalikan.

filter (opsional)

OptionalValue<Filter>

Kondisi filter. Untuk informasi selengkapnya, lihat Use filters.

Jika Anda menetapkan columnsToGet dan filter sekaligus, columnsToGet memilih kolom terlebih dahulu, lalu filter mengevaluasi baris-baris tersebut.

Respons

createRangeIterator mengembalikan Iterator<Row>. Panggil hasNext() untuk memeriksa apakah masih ada data yang tersedia, dan next() untuk mendapatkan objek Row berikutnya.

Contoh

Iterasi mundur

Gunakan setDirection(Direction.BACKWARD) untuk melakukan iterasi mundur. Untuk iterasi mundur, kunci primer awal harus lebih besar daripada kunci primer akhir.

String tableName = "range_iter_demo";

RangeIteratorParameter parameter = new RangeIteratorParameter(tableName);
parameter.setDirection(Direction.BACKWARD);

// Untuk iterasi mundur, kunci primer awal harus lebih besar daripada kunci primer akhir.
PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
parameter.setInclusiveStartPrimaryKey(startPkBuilder.build());

PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
parameter.setExclusiveEndPrimaryKey(endPkBuilder.build());

parameter.setMaxVersions(1);

Iterator<Row> iterator = client.createRangeIterator(parameter);
while (iterator.hasNext()) {
    Row row = iterator.next();
    System.out.println(row);
}

Batasi jumlah total baris

Gunakan setMaxCount untuk membatasi jumlah total baris yang dikembalikan oleh iterator. Fitur ini berguna untuk pembacaan top-N dan menghindari Pemindaian yang tidak perlu.

String tableName = "range_iter_demo";

RangeIteratorParameter parameter = new RangeIteratorParameter(tableName);

PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MIN);
parameter.setInclusiveStartPrimaryKey(startPkBuilder.build());

PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
parameter.setExclusiveEndPrimaryKey(endPkBuilder.build());

parameter.setMaxVersions(1);
// Mengembalikan maksimal 3 baris.
parameter.setMaxCount(3);

Iterator<Row> iterator = client.createRangeIterator(parameter);
while (iterator.hasNext()) {
    Row row = iterator.next();
    System.out.println(row);
}

Optimalkan memori dengan ukuran batch

Gunakan setBufferSize untuk mengontrol jumlah baris yang diambil per permintaan dasar. Kurangi nilainya untuk mengurangi penggunaan memori puncak selama Pemindaian besar.

String tableName = "range_iter_demo";

RangeIteratorParameter parameter = new RangeIteratorParameter(tableName);

PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MIN);
parameter.setInclusiveStartPrimaryKey(startPkBuilder.build());

PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
parameter.setExclusiveEndPrimaryKey(endPkBuilder.build());

parameter.setMaxVersions(1);
// Ambil 2 baris per permintaan dasar.
parameter.setBufferSize(2);

Iterator<Row> iterator = client.createRangeIterator(parameter);
while (iterator.hasNext()) {
    Row row = iterator.next();
    System.out.println(row);
}