全部产品
Search
文档中心

Tablestore:Hapus data

更新时间:Jul 02, 2025

Tablestore menyediakan operasi DeleteRow untuk menghapus satu baris data dan operasi BatchWriteRow untuk menghapus beberapa baris data sekaligus.

Catatan penggunaan

Data yang dihapus tidak dapat dipulihkan. Lanjutkan dengan hati-hati.

Prasyarat

  • Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Klien.

  • Sebuah tabel data telah dibuat, dan data telah ditulis ke dalam tabel tersebut.

Hapus satu baris data

Anda dapat memanggil operasi DeleteRow untuk menghapus satu baris data. Jika baris yang ingin dihapus tidak ada, tabel tetap tidak berubah.

Parameter

Parameter

Deskripsi

tableName

Nama tabel data.

primaryKey

Kunci utama dari baris. Nilai parameter ini terdiri dari nama, tipe, dan nilai setiap kolom kunci utama.

Penting

Jumlah dan tipe kolom kunci utama yang Anda tentukan harus sama dengan jumlah dan tipe kolom kunci utama aktual dalam tabel.

condition

Kondisi yang harus dipenuhi untuk melakukan operasi. Anda dapat mengonfigurasi kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Lakukan pembaruan bersyarat.

Contoh

Hapus satu baris data

Kode sampel berikut menunjukkan cara menghapus satu baris data dari tabel:

private static void deleteRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);

    client.deleteRow(new DeleteRowRequest(rowDeleteChange));
}                    

Tentukan kondisi untuk menghapus satu baris data

Kode sampel berikut menunjukkan cara menghapus satu baris data dari tabel ketika baris tersebut ada dan nilai kolom Col0 di baris tersebut lebih besar dari 100:

private static void deleteRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);

    // Tentukan kondisi untuk operasi DeleteRow. Dalam contoh ini, sebuah baris hanya dihapus jika baris tersebut ada dan nilai kolom Col0 lebih besar dari 100.
    Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
    condition.setColumnCondition(new SingleColumnValueCondition("Col0",
            SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
    rowDeleteChange.setCondition(condition);

    client.deleteRow(new DeleteRowRequest(rowDeleteChange));
}                   

Hapus beberapa baris data sekaligus

  1. Sebelum menghapus data, pilih metode yang sesuai berdasarkan kebutuhan bisnis Anda untuk mendapatkan informasi kunci utama tentang data yang ingin dihapus.

    • Untuk menghapus data dengan nilai kunci utama dalam rentang tertentu, panggil operasi GetRange untuk mendapatkan informasi kunci utama terkait. Untuk informasi lebih lanjut, lihat Membaca Data dengan Nilai Kunci Utama dalam Rentang Tertentu.

    • Untuk menghapus data yang memenuhi kondisi tertentu dari tabel dengan indeks pencarian, gunakan indeks pencarian untuk mendapatkan informasi kunci utama terkait. Untuk informasi lebih lanjut, lihat Kueri Dasar.

    • Untuk menghapus semua data dari tabel, disarankan untuk menghapus tabel dan membuat tabel baru dengan konfigurasi yang sama.

      Alternatifnya, panggil operasi GetRange, atur kunci utama awal ke INF_MIN dan kunci utama akhir ke INF_MAX untuk memindai semua data dalam tabel. Dengan cara ini, Anda dapat mendapatkan informasi kunci utama untuk semua data. Namun, pendekatan ini memerlukan banyak sumber daya komputasi. Lanjutkan dengan hati-hati.

  2. Panggil operasi BatchWriteRow untuk menghapus beberapa baris data sekaligus berdasarkan informasi kunci utama terkait. Untuk informasi lebih lanjut, lihat Menulis Data.

    Kode sampel berikut menunjukkan cara menghapus satu baris data dengan nilai kolom kunci utama pk sebagai pk dari tabel dan satu baris data dengan nilai kolom kunci utama pk1 sebagai pk1 serta nilai kolom kunci utama pk2 sebagai pk2 dari tabel lain secara bersamaan:

    private static void batchWriteRow(SyncClient client) {    
        BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();
    
        // Konstruksi rowDeleteChange1.
        PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk1Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk"));
        // Tentukan nama tabel data.
        RowDeleteChange rowDeleteChange1 = new RowDeleteChange("<TABLE_NAME1>", pk1Builder.build());
        // Tambahkan rowDeleteChange1 ke kode operasi batch.
        batchWriteRowRequest.addRowChange(rowDeleteChange1);
    
        // Konstruksi rowDeleteChange2.
        PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk2Builder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString("pk1"));
        pk2Builder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.fromString("pk2"));
        // Tentukan nama tabel data.
        RowDeleteChange rowDeleteChange2 = new RowDeleteChange("<TABLE_NAME2>", pk2Builder.build());
        // Tambahkan rowDeleteChange2 ke kode operasi batch.
        batchWriteRowRequest.addRowChange(rowDeleteChange2);
    
        BatchWriteRowResponse response = client.batchWriteRow(batchWriteRowRequest);
    
        System.out.println("Apakah semua operasi berhasil:" + response.isAllSucceed());
        if (!response.isAllSucceed()) {
            for (BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) {
                System.out.println("Baris gagal:" + batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey());
                System.out.println("Penyebab kegagalan:" + rowResult.getError());
            }
            /**
             * Anda dapat menggunakan metode createRequestForRetry untuk membangun permintaan lain untuk mencoba kembali operasi pada baris yang gagal. Dalam contoh ini, hanya permintaan ulang yang dibangun.
             * Kami sarankan Anda menggunakan kebijakan ulang kustom dalam Tablestore SDK sebagai metode ulang. Fitur ini memungkinkan Anda mencoba kembali baris yang gagal setelah operasi batch dilakukan. Setelah Anda menentukan kebijakan ulang, Anda tidak perlu menambahkan kode ulang untuk memanggil operasi.
             */
            BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
        }
    }

Referensi

Waktu Hidup (TTL) menentukan periode retensi data. Anda dapat mengonfigurasi TTL untuk tabel agar data yang kedaluwarsa dihapus secara otomatis. Untuk informasi lebih lanjut, lihat Versi Data dan TTL.