全部产品
Search
文档中心

Tablestore:Menulis data

更新时间:Jul 06, 2025

Tablestore memungkinkan Anda menulis data ke tabel data dengan menulis satu baris atau beberapa baris data sekaligus. Anda dapat menulis baris secara individual atau menulis beberapa baris data sekaligus berdasarkan kebutuhan bisnis Anda. Topik ini menjelaskan cara menulis data ke Tablestore menggunakan Tablestore SDK for Java.

Prasyarat

  • Klien Tablestore telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.

  • Tabel data telah dibuat dalam instance Tablestore.

Metode penulisan

Tablestore memungkinkan Anda menulis satu baris data, memperbarui satu baris data, serta menulis beberapa baris data sekaligus melalui pemanggilan operasi yang berbeda. Tabel berikut menjelaskan perbedaan dan skenario penggunaan yang sesuai untuk setiap metode penulisan.

Metode Penulisan

Deskripsi

Skema

Menulis satu baris data

Panggil operasi PutRow untuk menulis satu baris data.

Metode ini cocok untuk skenario di mana Anda ingin menulis sejumlah kecil data.

Memperbarui satu baris data

Anda dapat memanggil operasi UpdateRow untuk memperbarui satu baris data.

Metode ini cocok untuk skenario di mana Anda ingin memperbarui sejumlah kecil data.

Menulis beberapa baris data sekaligus

Anda dapat memanggil operasi BatchWriteRow untuk menulis beberapa baris data ke satu atau lebih tabel sekaligus.

Metode ini cocok untuk skenario di mana Anda ingin menulis, menghapus, atau memperbarui sejumlah besar data dan skenario di mana Anda ingin menulis, menghapus, dan memperbarui data pada saat yang sama.

Parameter

Tabel berikut menjelaskan parameter yang dapat dikonfigurasi untuk menulis data ke Tablestore.

Parameter

Deskripsi

tableName

Nama tabel data.

primaryKey

Informasi kunci utama tentang tabel data. Informasi kunci utama mencakup 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 yang sebenarnya di tabel.

  • Jika kolom kunci utama adalah kolom kunci utama auto-increment, atur nilai kolom kunci utama auto-increment sebagai placeholder. Untuk informasi lebih lanjut, lihat Kolom kunci utama auto-increment.

column

Informasi tentang kolom atribut. Informasi tentang kolom atribut mencakup nama, nilai, tipe, dan timestamp setiap kolom atribut. Tipe dan timestamp bersifat opsional.

  • Nama kolom atribut. Nama kolom atribut dapat memiliki panjang 1 hingga 255 karakter dan dapat berisi huruf, angka, dan garis bawah (_). Nama bersifat peka huruf besar/kecil dan tidak boleh dimulai dengan angka.

  • Tipe kolom atribut. Tipe kolom atribut dapat berupa String, Integer, Binary, Floating-point, atau Boolean.

  • Timestamp adalah nomor versi data. Nomor versi data dihasilkan secara otomatis oleh sistem. Anda juga dapat menentukan nomor versi data kustom. Untuk informasi lebih lanjut, lihat Nomor versi.

Catatan
  • Untuk menghapus kolom atribut, tentukan hanya nama kolom atribut.

  • Untuk menghapus versi data tertentu dari kolom atribut, tentukan nama dan timestamp kolom atribut.

  • Setelah Anda menghapus semua kolom atribut dari sebuah baris, baris tersebut masih ada. Untuk menghapus baris, panggil operasi DeleteRow. Untuk informasi lebih lanjut, lihat Menghapus data.

condition

Kondisi yang harus dipenuhi untuk menulis data. Kondisi bisa berupa kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Melakukan pembaruan bersyarat.

Menulis satu baris data

Operasi PutRow digunakan untuk menulis satu baris data. Jika baris sudah ada, operasi PutRow akan menghapus semua versi data dari kolom pada baris tersebut sebelum menulis data baru.

Catatan

Dalam contoh ini, pkValue mewakili nilai kolom kunci utama. Tentukan pkValue sesuai kebutuhan bisnis Anda. Untuk menulis data ke tabel, Anda harus menyertakan informasi kunci utama lengkap serta informasi kolom atribut yang ingin ditulis. Anda juga dapat menentukan kondisi untuk menulis data. Misalnya, Anda dapat menetapkan bahwa data hanya dapat ditulis jika baris yang ditentukan tidak ada.

Contoh kode berikut menunjukkan cara menggunakan nomor versi data yang dihasilkan otomatis oleh sistem, menentukan nomor versi data kustom, dan menentukan kondisi untuk menulis data:

Gunakan nomor versi data yang dihasilkan secara otomatis oleh sistem

Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data satu versi. Dalam contoh ini, nomor versi data dihasilkan otomatis oleh sistem:

private static void putRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);

    // Tambahkan kolom atribut.
    for (int i = 0; i < 10; i++) {
        rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }

    client.putRow(new PutRowRequest(rowPutChange));
}

Tentukan nomor versi data kustom

Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data tiga versi. Dalam contoh ini, nomor versi data kustom ditentukan:

private static void putRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);

    // Tambahkan kolom atribut.
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }

    client.putRow(new PutRowRequest(rowPutChange));
}

Tentukan kondisi keberadaan baris

Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data tiga versi, ketika baris yang ditentukan tidak ada. Dalam contoh ini, nomor versi data kustom ditentukan:

private static void putRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);

    // Tentukan kondisi untuk operasi PutRow. Dalam contoh ini, data ditulis ke tabel data hanya jika baris yang ditentukan tidak ada.
    rowPutChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));

    // Tambahkan kolom atribut.
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }

    client.putRow(new PutRowRequest(rowPutChange));
}

Tentukan kondisi nilai kolom dan kondisi keberadaan baris pada saat yang sama

Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data tiga versi, ketika baris yang ditentukan ada dan nilai kolom Col0 lebih besar dari 100. Dalam contoh ini, nomor versi data kustom ditentukan:

private static void putRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);

    // Tentukan kondisi untuk operasi PutRow. Dalam contoh ini, baris ditulis ke tabel data hanya jika baris 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)));
    rowPutChange.setCondition(condition);

    // Tambahkan kolom atribut.
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }

    client.putRow(new PutRowRequest(rowPutChange));
}

Memperbarui satu baris data

Operasi UpdateRow digunakan untuk memperbarui satu baris data. Anda dapat memperbarui nilai kolom atribut, menambahkan atau menghapus kolom atribut, atau menghapus versi data tertentu dari kolom atribut. Jika baris tidak ada, baris baru akan ditambahkan.

Catatan

Jika operasi UpdateRow hanya menentukan kolom yang ingin dihapus dari baris dan baris tidak ada, tidak ada baris yang ditambahkan ke tabel data.

Contoh kode berikut menunjukkan cara memperbarui kolom tertentu, menghapus versi data tertentu dari kolom Col1, dan menghapus kolom Col0 baik dengan atau tanpa menentukan kondisi:

Perbarui baris data tanpa menentukan kondisi

Contoh kode berikut menunjukkan cara memperbarui baris data tanpa menentukan kondisi:

private static void updateRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowUpdateChange rowUpdateChange = new RowUpdateChange("your_tableName", primaryKey);

    // Perbarui kolom tertentu.
    for (int i = 0; i < 10; i++) {
        rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
    }

    // Hapus versi data tertentu dari kolom.
    rowUpdateChange.deleteColumn("Col1", 1465373223000L);

    // Hapus kolom.
    rowUpdateChange.deleteColumns("Col0");

    client.updateRow(new UpdateRowRequest(rowUpdateChange));
}

Tentukan kondisi keberadaan baris atau kondisi berdasarkan nilai kolom untuk memperbarui data

Contoh kode berikut menunjukkan cara memperbarui baris data hanya jika baris yang ditentukan ada dan nilai kolom Col0 lebih besar dari 100:

private static void updateRow(SyncClient client, String pkValue) {
    // Konstruksi kunci utama.
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data.
    RowUpdateChange rowUpdateChange = new RowUpdateChange("your_tableName", primaryKey);

    // Tentukan kondisi untuk operasi UpdateRow. Dalam contoh ini, baris data diperbarui hanya jika baris 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)));
    rowUpdateChange.setCondition(condition);

    // Perbarui kolom tertentu.
    for (int i = 0; i < 10; i++) {
        rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
    }

    // Hapus versi data tertentu dari kolom.
    rowUpdateChange.deleteColumn("Col1", 1465373223000L);

    // Hapus kolom.
    rowUpdateChange.deleteColumns("Col0");

    client.updateRow(new UpdateRowRequest(rowUpdateChange));
}

Menulis beberapa baris data sekaligus

Operasi BatchWriteRow digunakan untuk menulis beberapa baris data ke satu atau lebih tabel sekaligus.

Operasi BatchWriteRow mencakup beberapa operasi PutRow, UpdateRow, dan DeleteRow. Saat memanggil operasi BatchWriteRow, proses pembuatan suboperasi serupa dengan pemanggilan operasi PutRow, UpdateRow, atau DeleteRow secara individual. Setiap operasi PutRow, UpdateRow, atau DeleteRow diproses secara terpisah oleh Tablestore, dan respons untuk setiap operasi dikembalikan secara independen.

Catatan
  • Operasi BatchWriteRow tidak memberlakukan batas atas pada jumlah permintaan bersamaan. Kami merekomendasikan agar Anda mengonfigurasi jumlah permintaan bersamaan berdasarkan spesifikasi klien dan status sumber daya untuk memastikan efisiensi dan stabilitas kode.

  • Jika server mendeteksi parameter tidak valid dalam operasi tertentu, operasi BatchWriteRow melempar pengecualian yang menunjukkan parameter tidak valid. Dalam hal ini, tidak ada operasi dalam permintaan yang dilakukan.

  • Saat memanggil operasi BatchWriteRow untuk menulis beberapa baris data sekaligus, beberapa baris mungkin gagal ditulis. Jika ini terjadi, Tablestore mengembalikan BatchWriteRowResponse, yang mencakup indeks dan pesan kesalahan baris yang gagal. Kami merekomendasikan agar Anda memeriksa nilai pengembalian. Anda dapat menentukan apakah semua baris berhasil ditulis berdasarkan parameter isAllSucceed dalam BatchWriteRowResponse.

Contoh kode berikut menunjukkan cara mengirim permintaan untuk operasi BatchWriteRow, yang terdiri dari dua operasi PutRow, satu operasi DeleteRow, dan satu operasi UpdateRow:

private static void batchWriteRow(SyncClient client) {
    BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();

    // Konstruksi rowPutChange pertama.
    PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk1Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue1"));
    // Tentukan nama tabel data.
    RowPutChange rowPutChange1 = new RowPutChange("your_tableName", pk1Builder.build());
    // Tambahkan kolom.
    for (int i = 0; i < 10; i++) {
        rowPutChange1.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    // Tambahkan rowPutChange1 ke kode operasi batch.
    batchWriteRowRequest.addRowChange(rowPutChange1);

    // Konstruksi rowPutChange kedua.
    PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk2Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue2"));
    // Tentukan nama tabel data.
    RowPutChange rowPutChange2 = new RowPutChange("your_tableName", pk2Builder.build());
    // Tambahkan kolom.
    for (int i = 0; i < 10; i++) {
        rowPutChange2.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    // Tambahkan rowPutChange2 ke kode operasi batch.
    batchWriteRowRequest.addRowChange(rowPutChange2);

    // Konstruksi rowUpdateChange.
    PrimaryKeyBuilder pk3Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk3Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue3"));
    // Tentukan nama tabel data.
    RowUpdateChange rowUpdateChange = new RowUpdateChange("your_tableName", pk3Builder.build());
    // Tambahkan kolom.
    for (int i = 0; i < 10; i++) {
        rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    // Hapus kolom.
    rowUpdateChange.deleteColumns("Col0");
    // Tambahkan rowUpdateChange ke kode operasi batch.
    batchWriteRowRequest.addRowChange(rowUpdateChange);

    // Konstruksi rowDeleteChange.
    PrimaryKeyBuilder pk4Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk4Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue4"));
    // Tentukan nama tabel data.
    RowDeleteChange rowDeleteChange = new RowDeleteChange("your_tableName", pk4Builder.build());
    // Tambahkan rowDeleteChange ke kode operasi batch.
    batchWriteRowRequest.addRowChange(rowDeleteChange);

    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 yang 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 merekomendasikan agar Anda menggunakan kebijakan ulang kustom dalam SDK Tablestore sebagai metode ulang. Dengan cara ini, Anda dapat 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());
    }
}

FAQ

Referensi

  • Untuk informasi lebih lanjut tentang kode sampel yang dapat digunakan untuk melakukan operasi data Tablestore, kunjungi kode sampel di GitHub.

  • Untuk mengumpulkan statistik real-time tentang aplikasi online, seperti jumlah tampilan halaman (PV) pada berbagai halaman, Anda dapat menggunakan fitur penghitung atomik. Untuk informasi lebih lanjut, lihat Gunakan Fitur Penghitung Atomik.

  • Untuk melakukan operasi atomik untuk menulis satu atau beberapa baris data, Anda dapat menggunakan fitur transaksi lokal. Untuk informasi lebih lanjut, lihat Gunakan Fitur Transaksi Lokal.