全部产品
Search
文档中心

Tablestore:Filter

更新时间:Nov 07, 2025

Menyaring sejumlah besar data di sisi klien tidak efisien. Tablestore memungkinkan Anda mengonfigurasi filter untuk menyaring data di server berdasarkan kondisi tertentu, mengurangi lalu lintas jaringan dan meningkatkan kinerja kueri.

Cara menggunakan

Tablestore menyediakan tiga jenis filter: pemeriksaan nilai kolom tunggal, pencocokan ekspresi reguler, dan kombinasi multi-kondisi. Atur instance filter menggunakan metode setFilter dari permintaan kueri untuk menyaring data di server, mengurangi overhead jaringan dan meningkatkan efisiensi kueri.

  • SingleColumnValueFilter: Filter yang menentukan apakah nilai kolom atribut tunggal memenuhi kondisi tertentu.

  • SingleColumnValueRegexFilter: Filter yang menggunakan ekspresi reguler untuk mencocokkan substring dalam kolom atribut String, kemudian mengonversinya ke tipe data tertentu dan memeriksa apakah nilainya memenuhi kondisi.

  • CompositeColumnValueFilter: Filter yang menggabungkan beberapa kondisi untuk menyaring data.

Filter nilai kolom tunggal

public class SingleColumnValueFilter extends ColumnValueFilter

Parameter

Parameter

Tipe

Deskripsi

operator (wajib)

CompareOperator

Operator relasional. Nilai valid: EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, dan LESS_EQUAL.

columnName (wajib)

String

Nama kolom atribut yang akan dievaluasi.

columnValue (wajib)

ColumnValue

Nilai untuk perbandingan.

passIfMissing

boolean

Menentukan apakah baris dikembalikan jika baris tersebut tidak mengandung kolom atribut yang akan dievaluasi. Nilai default adalah true, yang menunjukkan bahwa baris tersebut dikembalikan.

latestVersionsOnly

boolean

Menentukan apakah hanya versi terbaru data yang dievaluasi. Nilai default adalah true. Jika kolom atribut referensi memiliki beberapa versi data, hanya versi terbaru yang dievaluasi terhadap kondisi filter.

Filter nilai kolom tunggal dengan ekspresi reguler

Hanya kolom atribut String yang mendukung filter ekspresi reguler.

public class SingleColumnValueRegexFilter extends ColumnValueFilter

Parameter

Parameter

Tipe

Deskripsi

operator (wajib)

CompareOperator

Operator relasional. Nilai valid: EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, dan LESS_EQUAL.

columnName (wajib)

String

Nama kolom atribut yang akan dievaluasi.

columnValue (wajib)

ColumnValue

Nilai untuk perbandingan.

regexRule (wajib)

OptionalValue<RegexRule>

Aturan pencocokan ekspresi reguler. Ini mencakup parameter berikut.

  • regex: Ekspresi reguler yang digunakan untuk mencocokkan substring. Panjangnya tidak boleh melebihi 256 byte.

    • Ekspresi reguler Perl dan ekspresi reguler single-byte didukung.

    • Pencocokan ekspresi reguler untuk karakter Cina tidak didukung.

    • Sintaks pengelompokan didukung. Jika ekspresi reguler mengandung kelompok, substring pertama yang cocok dikembalikan. Misalnya, jika nilai kolom yang akan dicocokkan adalah 1aaa51bbb5 dan ekspresi reguler adalah 1([a-z]+)5, hasil yang dikembalikan adalah aaa.

  • castType: Tipe data ke mana substring tersebut dikonversi. Nilai valid: VT_INTEGER (integer), VT_DOUBLE (floating-point presisi ganda), dan VT_STRING (string).

Filter komposit

Filter ini mendukung kombinasi hingga 32 kondisi.

public class CompositeColumnValueFilter extends ColumnValueFilter

Parameter

Parameter

Tipe

Deskripsi

type (wajib)

LogicOperator

Operator logika. Nilai valid: NOT, AND, dan OR.

filters (wajib)

List<ColumnValueFilter>

Filter yang berpartisipasi dalam operasi logika. Filter-filter tersebut bisa berupa SingleColumnValueFilter, SingleColumnValueRegexFilter, atau CompositeColumnValueFilter.

Kode contoh

Sebelum menjalankan kode, konfigurasikan kredensial akses Anda dengan menyetel variabel lingkungan TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.

Filter nilai kolom tunggal

Kode contoh berikut menunjukkan cara melakukan kueri rentang pada baris yang nilai kunci primernya berada dalam rentang [row1, row3). Kode kemudian menyaring hasil untuk mengembalikan hanya baris di mana atribut col1 sama dengan val1.

import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.Column;
import com.alicloud.openservices.tablestore.model.ColumnValue;
import com.alicloud.openservices.tablestore.model.GetRangeRequest;
import com.alicloud.openservices.tablestore.model.GetRangeResponse;
import com.alicloud.openservices.tablestore.model.PrimaryKeyBuilder;
import com.alicloud.openservices.tablestore.model.PrimaryKeyValue;
import com.alicloud.openservices.tablestore.model.RangeRowQueryCriteria;
import com.alicloud.openservices.tablestore.model.Row;
import com.alicloud.openservices.tablestore.model.filter.SingleColumnValueFilter;

public class SingleValueFilter {

    public static void main(String[] args) {

        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut berdasarkan informasi instans Anda.
        final String region = "cn-hangzhou"; // ID wilayah tempat instans berada, misalnya, "cn-hangzhou".
        final String instanceName = "your_instance_name"; // Nama instans.
        final String endpoint = "your_endpoint"; // Titik akhir instans.

        SyncClient client = null;
        try {
            // Konstruksi kredensial.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance klien.
            client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Konstruksi kriteria kueri.
            // TODO: Ubah nama tabel.
            RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
            // Setel kunci primer awal.
            // TODO: Ubah nama dan nilai kunci primer.
            PrimaryKeyBuilder startKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            startKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
            rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startKeyBuilder.build());
            // Setel kunci primer akhir. Hasil tidak termasuk kunci primer akhir.
            // TODO: Ubah nama dan nilai kunci primer.
            PrimaryKeyBuilder endKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            endKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row3"));
            rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endKeyBuilder.build());
            // Setel jumlah versi yang akan dikueri.
            rangeRowQueryCriteria.setMaxVersions(1);

            // Konstruksi filter dengan kondisi col1 == "val1".
            // TODO: Ubah bidang filter dan nilai.
            SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("col1", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromString("val1"));
            rangeRowQueryCriteria.setFilter(singleColumnValueFilter);

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

            // Proses hasil.
            System.out.println("Kueri selesai. Statistik hasil:");
            System.out.println("RequestId: " + getRangeResponse.getRequestId());
            System.out.println("Biaya CU Baca: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
            System.out.println("Biaya CU Tulis: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
            
            // Cetak hasil kueri.
            if (getRangeResponse.getRows() != null && !getRangeResponse.getRows().isEmpty()) {
                System.out.println("Ditemukan " + getRangeResponse.getRows().size() + " baris yang memenuhi kondisi:");
                for (Row row : getRangeResponse.getRows()) {
                    // Dapatkan dan cetak informasi kunci primer.
                    // TODO: Ubah ini berdasarkan tipe data kunci primer.
                    String primaryKeyInfo = row.getPrimaryKey().toString();
                    System.out.println("- Kunci Primer: " + primaryKeyInfo);

                    // Telusuri dan cetak semua kolom atribut baris. Jika MaxVersions adalah 1, setiap kolom adalah versi terbaru.
                    if (row.getColumns() != null && row.getColumns().length > 0) {
                        System.out.println("  Kolom Atribut:");
                        for (Column column : row.getColumns()) {
                            // Cetak nama kolom, nilai, dan timestamp.
                            String columnName = column.getName();
                            // TODO: Ubah ini berdasarkan tipe data kolom atribut.
                            String columnValue = column.getValue().toString();
                            long timestamp = column.getTimestamp();
                            System.out.println(
                                    String.format("    - %s: %s (Versi Timestamp: %d)", columnName, columnValue, timestamp)
                            );
                        }
                    } else {
                        System.out.println("  (Baris ini tidak memiliki kolom atribut)");
                    }
                }
            } else {
                System.out.println("Tidak ada data yang ditemukan yang memenuhi kondisi filter.");
            }
            
            System.out.println("Operasi kueri filter selesai.");

        } catch (Exception e) {
            System.err.println("Kueri gagal. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan klien.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Filter nilai kolom tunggal dengan ekspresi reguler

Kode contoh berikut menunjukkan cara melakukan kueri rentang pada baris yang nilai kunci primernya berada dalam rentang [row1, row3). Kode kemudian menggunakan ekspresi reguler untuk menyaring hasil dan mengembalikan baris di mana atribut col1 cocok dengan ekspresi reguler 1([a-z]+)5 dan substring yang cocok adalah aaa.

import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.Column;
import com.alicloud.openservices.tablestore.model.ColumnValue;
import com.alicloud.openservices.tablestore.model.GetRangeRequest;
import com.alicloud.openservices.tablestore.model.GetRangeResponse;
import com.alicloud.openservices.tablestore.model.PrimaryKeyBuilder;
import com.alicloud.openservices.tablestore.model.PrimaryKeyValue;
import com.alicloud.openservices.tablestore.model.RangeRowQueryCriteria;
import com.alicloud.openservices.tablestore.model.Row;
import com.alicloud.openservices.tablestore.model.filter.RegexRule;
import com.alicloud.openservices.tablestore.model.filter.SingleColumnValueRegexFilter;

public class SingleValueRegexFilter {

    public static void main(String[] args) {

        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut berdasarkan informasi instans Anda.
        final String region = "cn-hangzhou"; // ID wilayah tempat instans berada, misalnya, "cn-hangzhou".
        final String instanceName = "your_instance_name"; // Nama instans.
        final String endpoint = "your_endpoint"; // Titik akhir instans.

        SyncClient client = null;
        try {
            // Konstruksi kredensial.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance klien.
            client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Konstruksi kriteria kueri.
            // TODO: Ubah nama tabel.
            RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
            // Setel kunci primer awal.
            // TODO: Ubah nama dan nilai kunci primer.
            PrimaryKeyBuilder startKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            startKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
            rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startKeyBuilder.build());
            // Setel kunci primer akhir. Hasil tidak termasuk kunci primer akhir.
            // TODO: Ubah nama dan nilai kunci primer.
            PrimaryKeyBuilder endKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            endKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row3"));
            rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endKeyBuilder.build());
            // Setel jumlah versi yang akan dikueri.
            rangeRowQueryCriteria.setMaxVersions(1);

            // Konstruksi filter ekspresi reguler dengan kondisi cast<String>(reg(col1)) == "aaa".
            // TODO: Ubah ekspresi reguler, bidang filter, dan nilai yang cocok.
            RegexRule regexRule = new RegexRule("1([a-z]+)5", RegexRule.CastType.VT_STRING);
            SingleColumnValueRegexFilter singleColumnValueRegexFilter = new SingleColumnValueRegexFilter("col1", regexRule, SingleColumnValueRegexFilter.CompareOperator.EQUAL, ColumnValue.fromString("aaa"));
            rangeRowQueryCriteria.setFilter(singleColumnValueRegexFilter);

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

            // Proses hasil.
            System.out.println("Kueri filter regex selesai. Statistik hasil:");
            System.out.println("RequestId: " + getRangeResponse.getRequestId());
            System.out.println("Biaya CU Baca: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
            System.out.println("Biaya CU Tulis: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
            
            // Cetak hasil kueri.
            if (getRangeResponse.getRows() != null && !getRangeResponse.getRows().isEmpty()) {
                System.out.println("Ditemukan " + getRangeResponse.getRows().size() + " baris yang memenuhi kondisi filter regex:");
                for (Row row : getRangeResponse.getRows()) {
                    // Dapatkan dan cetak informasi kunci primer.
                    // TODO: Ubah ini berdasarkan tipe data kunci primer.
                    String primaryKeyInfo = row.getPrimaryKey().toString();
                    System.out.println("- Kunci Primer: " + primaryKeyInfo);

                    // Telusuri dan cetak semua kolom atribut baris. Jika MaxVersions adalah 1, setiap kolom adalah versi terbaru.
                    if (row.getColumns() != null && row.getColumns().length > 0) {
                        System.out.println("  Kolom Atribut:");
                        for (Column column : row.getColumns()) {
                            // Cetak nama kolom, nilai, dan timestamp.
                            String columnName = column.getName();
                            // TODO: Ubah ini berdasarkan tipe data kolom atribut.
                            String columnValue = column.getValue().toString();
                            long timestamp = column.getTimestamp();
                            System.out.println(
                                    String.format("    - %s: %s (Versi Timestamp: %d)", columnName, columnValue, timestamp)
                            );
                        }
                    } else {
                        System.out.println("  (Baris ini tidak memiliki kolom atribut)");
                    }
                }
            } else {
                System.out.println("Tidak ada data yang ditemukan yang memenuhi kondisi filter regex.");
            }
            
            System.out.println("Operasi kueri filter regex selesai.");

        } catch (Exception e) {
            System.err.println("Kueri filter regex gagal. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan klien.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Filter komposit

Kode contoh berikut menunjukkan cara melakukan kueri rentang pada baris yang nilai kunci primernya berada dalam rentang [row1, row3) dan kemudian menyaring data menggunakan filter komposit.

import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.Column;
import com.alicloud.openservices.tablestore.model.ColumnValue;
import com.alicloud.openservices.tablestore.model.GetRangeRequest;
import com.alicloud.openservices.tablestore.model.GetRangeResponse;
import com.alicloud.openservices.tablestore.model.PrimaryKeyBuilder;
import com.alicloud.openservices.tablestore.model.PrimaryKeyValue;
import com.alicloud.openservices.tablestore.model.RangeRowQueryCriteria;
import com.alicloud.openservices.tablestore.model.Row;
import com.alicloud.openservices.tablestore.model.filter.CompositeColumnValueFilter;
import com.alicloud.openservices.tablestore.model.filter.RegexRule;
import com.alicloud.openservices.tablestore.model.filter.SingleColumnValueFilter;
import com.alicloud.openservices.tablestore.model.filter.SingleColumnValueRegexFilter;

public class CompositeFilter {

    public static void main(String[] args) {

        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut berdasarkan informasi instans Anda.
        final String region = "cn-hangzhou"; // ID wilayah tempat instans berada, misalnya, "cn-hangzhou".
        final String instanceName = "your_instance_name"; // Nama instans.
        final String endpoint = "your_endpoint"; // Titik akhir instans.

        SyncClient client = null;
        try {
            // Konstruksi kredensial.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance klien.
            client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Konstruksi kriteria kueri.
            // TODO: Ubah nama tabel.
            RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
            // Setel kunci primer awal.
            // TODO: Ubah nama dan nilai kunci primer.
            PrimaryKeyBuilder startKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            startKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
            rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startKeyBuilder.build());
            // Setel kunci primer akhir. Hasil tidak termasuk kunci primer akhir.
            // TODO: Ubah nama dan nilai kunci primer.
            PrimaryKeyBuilder endKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            endKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row3"));
            rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endKeyBuilder.build());
            // Setel jumlah versi yang akan dikueri.
            rangeRowQueryCriteria.setMaxVersions(1);

            // Konstruksi SingleColumnValueFilter 1 dengan kondisi col1 == "val1".
            // TODO: Ubah bidang filter dan nilai.
            SingleColumnValueFilter singleColumnValueFilter1 = new SingleColumnValueFilter("col1", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromString("val1"));
            
            // Konstruksi SingleColumnValueRegexFilter 1 dengan kondisi cast<String>(reg(col2)) >= "aaa".
            // TODO: Ubah ekspresi reguler, nama bidang, dan nilai perbandingan.
            RegexRule regexRule = new RegexRule("1([a-z]+)5", RegexRule.CastType.VT_STRING);
            SingleColumnValueRegexFilter singleColumnValueRegexFilter = new SingleColumnValueRegexFilter("col2", regexRule, SingleColumnValueRegexFilter.CompareOperator.GREATER_EQUAL, ColumnValue.fromString("aaa"));
            
            // Konstruksi CompositeColumnValueFilter 1 dengan kondisi col1 == "val1" OR cast<String>(reg(col2)) >= "aaa".
            CompositeColumnValueFilter compositeColumnValueFilter1 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.OR);
            compositeColumnValueFilter1.addFilter(singleColumnValueFilter1);
            compositeColumnValueFilter1.addFilter(singleColumnValueRegexFilter);
            
            // Konstruksi SingleColumnValueFilter 2 dengan kondisi col3 == "val3".
            // TODO: Ubah bidang filter dan nilai.
            SingleColumnValueFilter singleColumnValueFilter2 = new SingleColumnValueFilter("col3", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromString("val3"));
            
            // Konstruksi CompositeColumnValueFilter 2 dengan kondisi CompositeColumnValueFilter 1 AND SingleColumnValueFilter 2.
            // Kondisinya adalah (col1 == "val1" OR cast<String>(reg(col2)) >= "aaa") AND col3 == "val3".
            CompositeColumnValueFilter compositeColumnValueFilter2 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.AND);
            compositeColumnValueFilter2.addFilter(compositeColumnValueFilter1);
            compositeColumnValueFilter2.addFilter(singleColumnValueFilter2);
            
            // Tambahkan filter ke kueri.
            rangeRowQueryCriteria.setFilter(compositeColumnValueFilter2);

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

            // Proses hasil.
            System.out.println("Kueri selesai. Statistik hasil:");
            System.out.println("RequestId: " + getRangeResponse.getRequestId());
            System.out.println("Biaya CU Baca: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
            System.out.println("Biaya CU Tulis: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
            
            // Cetak hasil kueri.
            if (getRangeResponse.getRows() != null && !getRangeResponse.getRows().isEmpty()) {
                System.out.println("Ditemukan " + getRangeResponse.getRows().size() + " baris yang memenuhi kondisi:");
                for (Row row : getRangeResponse.getRows()) {
                    // Dapatkan dan cetak informasi kunci primer.
                    // TODO: Ubah ini berdasarkan tipe data kunci primer.
                    String primaryKeyInfo = row.getPrimaryKey().toString();
                    System.out.println("- Kunci Primer: " + primaryKeyInfo);

                    // Telusuri dan cetak semua kolom atribut baris. Jika MaxVersions adalah 1, setiap kolom adalah versi terbaru.
                    if (row.getColumns() != null && row.getColumns().length > 0) {
                        System.out.println("  Kolom Atribut:");
                        for (Column column : row.getColumns()) {
                            // Cetak nama kolom, nilai, dan timestamp.
                            String columnName = column.getName();
                            // TODO: Ubah ini berdasarkan tipe data kolom atribut.
                            String columnValue = column.getValue().toString();
                            long timestamp = column.getTimestamp();
                            System.out.println(
                                    String.format("    - %s: %s (Versi Timestamp: %d)", columnName, columnValue, timestamp)
                            );
                        }
                    } else {
                        System.out.println("  (Baris ini tidak memiliki kolom atribut)");
                    }
                }
            } else {
                System.out.println("Tidak ada data yang ditemukan yang memenuhi kondisi filter.");
            }
            
            System.out.println("Operasi kueri filter komposit selesai.");

        } catch (Exception e) {
            System.err.println("Kueri gagal. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan klien.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Perilaku penyaringan ketika kolom tidak ada

Gunakan metode setPassIfMissing untuk menentukan apakah akan mengembalikan baris jika baris tersebut tidak mengandung kolom atribut yang akan dievaluasi.

// Jangan kembalikan baris jika tidak mengandung kolom atribut yang akan dievaluasi.
singleColumnValueFilter.setPassIfMissing(false);

Menyaring data versi historis

Gunakan metode setLatestVersionsOnly untuk menentukan apakah akan mengevaluasi semua versi data. Jika Anda memilih untuk mengevaluasi semua versi, baris akan dikembalikan jika ada versi yang memenuhi kondisi.

// Evaluasi semua versi data.
singleColumnValueFilter.setLatestVersionsOnly(false);

Referensi

Baca data