All Products
Search
Document Center

Tablestore:Baca baris dengan iterator

Last Updated:Jun 26, 2026

Tablestore SDK untuk Java menyediakan iterator untuk membaca beberapa baris dalam rentang kunci primer. Iterator ini secara otomatis mengirim permintaan terpaginasi, sehingga cocok untuk memindai rentang besar dan memproses baris satu per satu.

Prasyarat

Instal Tablestore SDK untuk Java dan inisialisasi klien.

Deskripsi

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

Iterator dibuat pada rentang kunci primer dan mengembalikan Iterator<Row> standar Java. Setiap pemanggilan iterator.next() mengambil satu baris dari buffer internal dan mengirim permintaan batch berikutnya saat buffer kosong. Anda tidak perlu melacak nextStartPrimaryKey atau melakukan loop manual atas getRange.

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

  • 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 primernya.

  • 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 (wajib, salah satu dari maxVersions atau timeRange)

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 (wajib, salah satu dari maxVersions atau timeRange)

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 berisi kolom yang ditentukan, null dikembalikan.

filter (opsional)

OptionalValue<Filter>

Kondisi filter. Untuk informasi selengkapnya, lihat Gunakan filter.

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

Contoh

Iterasi mundur

Gunakan setDirection(Direction.BACKWARD) untuk melakukan iterasi mundur. Pada 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 mencegah 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 dalam setiap permintaan dasar. Kurangi nilainya untuk menekan 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);
}

Referensi