全部产品
Search
文档中心

Tablestore:Membuat tabel data

更新时间:Nov 09, 2025

Topik ini menjelaskan cara menggunakan Tablestore SDK untuk Java dalam membuat tabel data Tablestore dan mengonfigurasi parameternya.

Metode

public CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException

Parameter dari CreateTableRequest

  • tableMeta (wajib) TableMeta: Skema tabel. Parameter ini mencakup parameter berikut.

    Nama

    Tipe

    Deskripsi

    tableName (wajib)

    String

    Nama tabel data.

    primaryKey (wajib)

    List<PrimaryKeySchema>

    Informasi tentang primary key.

    • Anda dapat mengonfigurasi satu hingga empat kolom kunci utama. Secara default, data diurutkan dalam urutan menaik. Kolom kunci utama pertama adalah kunci partisi.

    • Tipe data yang didukung untuk kolom kunci utama adalah STRING, INTEGER, dan BINARY. Anda dapat mengatur kolom kunci utama bertipe integer yang bukan kunci partisi sebagai kolom kunci utama auto-increment.

    definedColumns (opsional)

    List<DefinedColumnSchema>

    Informasi tentang kolom yang telah ditentukan sebelumnya.

    • Kolom pradefinisi adalah kolom atribut yang dapat digunakan untuk membuat indeks sekunder dan indeks pencarian.

    • Tipe data yang didukung untuk kolom pradefinisi adalah STRING, INTEGER, BINARY, DOUBLE, dan BOOLEAN.

  • tableOptions (wajib) TableOptions: Konfigurasi tabel data. Parameter ini mencakup parameter berikut.

    Nama

    Tipe

    Deskripsi

    timeToLive (wajib)

    OptionalValue<Integer>

    Masa hidup data (TTL), dalam detik.

    • Jika Anda mengatur parameter ini ke -1, data tidak pernah kedaluwarsa. Jika tidak, nilai minimumnya adalah 86400 (satu hari). Data yang melebihi TTL-nya akan secara otomatis dihapus.

    • Untuk menggunakan indeks pencarian atau indeks sekunder, atur TTL ke -1 atau atur parameter allowUpdate ke false.

    maxVersions (wajib)

    OptionalValue<Integer>

    Jumlah versi maksimum.

    • Untuk menggunakan indeks pencarian atau indeks sekunder, atur parameter ini ke 1.

    maxTimeDeviation (opsional)

    OptionalValue<Long>

    Offset versi maksimum, dalam detik. Nilai defaultnya adalah 86400 (satu hari).

    • Selisih antara timestamp data yang ditulis dan waktu sistem saat ini harus berada dalam offset versi maksimum. Jika tidak, operasi penulisan gagal.

    • Rentang versi valid untuk data kolom atribut adalah [max(Waktu tulis data - Offset versi maksimum, Waktu tulis data - Masa hidup data), Waktu tulis data + Offset versi maksimum).

    allowUpdate (opsional)

    OptionalValue<Boolean>

    Menentukan apakah pembaruan diizinkan. Nilai defaultnya adalah true.

    • Jika Anda mengatur parameter ini ke false, Anda tidak dapat memperbarui data menggunakan metode updateRow.

  • indexMeta (opsional) List<IndexMeta>: Daftar indeks sekunder. Setiap indeks mencakup parameter berikut.

    Nama

    Tipe

    Deskripsi

    indexName (wajib)

    String

    Nama indeks.

    primaryKey (wajib)

    List<String>

    Kolom primary key dari indeks.

    • Terdiri dari kolom kunci utama dan kolom pradefinisi dari tabel data.

    • Saat menggunakan indeks sekunder lokal, kolom kunci utama pertama dari indeks harus menjadi kolom kunci utama pertama dari tabel data.

    definedColumns (opsional)

    List<String>

    Kolom yang telah ditentukan sebelumnya dari indeks.

    • Terdiri dari kolom pradefinisi dari tabel data.

    indexType (opsional)

    IndexType

    Tipe indeks. Nilai valid:

    • IT_GLOBAL_INDEX (default): indeks sekunder global.

    • IT_LOCAL_INDEX: indeks sekunder lokal.

    indexUpdateMode (opsional)

    IndexUpdateMode

    Mode pembaruan indeks. Nilai valid:

    • IUM_ASYNC_INDEX (default): pembaruan asinkron. Mode pembaruan untuk indeks sekunder global harus asinkron.

    • IUM_SYNC_INDEX: pembaruan sinkron. Mode pembaruan untuk indeks sekunder lokal harus sinkron.

  • streamSpecification (opsional) OptionalValue<StreamSpecification>: Konfigurasi aliran. Parameter ini mencakup parameter berikut.

    Nama

    Tipe

    Deskripsi

    enableStream (wajib)

    boolean

    Menentukan apakah aliran diaktifkan. Nilai defaultnya adalah false.

    expirationTime (opsional)

    OptionalValue<Integer>

    Waktu kedaluwarsa data aliran. Ini menentukan berapa lama log inkremental disimpan. Satuannya adalah jam. Nilai maksimumnya adalah 168 (7 hari).

    • Parameter expirationTime diperlukan jika enableStream diatur ke true.

  • enableLocalTxn (opsional) OptionalValue<Boolean>: Menentukan apakah fitur transaksi lokal diaktifkan. Nilai defaultnya adalah false.

    • Fitur ini hanya didukung di Java SDK versi 5.11.0 ke atas.

    • Fitur transaksi lokal dan kolom primary key auto-increment tidak dapat digunakan secara bersamaan. Jika Anda mengonfigurasi kolom primary key auto-increment, fitur transaksi lokal tidak akan berlaku meskipun diaktifkan.

    • Jika Anda membuat tabel tanpa mengaktifkan fitur transaksi lokal dan ingin menggunakannya nanti, kirim tiket untuk meminta fitur tersebut.

  • sseSpecification (opsional) OptionalValue<SSESpecification>: Pengaturan untuk enkripsi data. Tabel berikut menjelaskan parameter untuk `sseSpecification`.

    Penting

    Anda hanya dapat mengaktifkan dan mengonfigurasi fitur enkripsi data saat membuat tabel. Fitur ini tidak dapat dinonaktifkan setelah tabel dibuat.

    Nama

    Tipe

    Deskripsi

    enable (wajib)

    boolean

    Menentukan apakah fitur enkripsi data diaktifkan. Nilai defaultnya adalah false.

    keyType (opsional)

    OptionalValue<SSEKeyType>

    Tipe enkripsi. SSEKeyType mencakup tipe berikut.

    • SSE_KMS_SERVICE: Enkripsi KMS.

    • SSE_BYOK: Enkripsi Bring-Your-Own-Key (BYOK).

    keyId (opsional)

    OptionalValue<String>

    ID kunci master pelanggan (CMK). Parameter ini diperlukan hanya jika keyType diatur ke SSE_BYOK.

    roleArn (opsional)

    OptionalValue<String>

    Nama Sumber Daya Alibaba Cloud (ARN) dari peran Resource Access Management (RAM). Parameter ini diperlukan hanya jika keyType diatur ke SSE_BYOK.

  • reservedThroughput (opsional) ReservedThroughput: throughput baca/tulis yang dicadangkan. Satuannya adalah unit kapasitas (CU). Nilai defaultnya adalah 0. Parameter ini hanya berlaku untuk instans komputasi-teroptimalkan dalam mode CU.

Contoh kode

Penggunaan dasar

Contoh ini membuat tabel bernama test_table dengan satu kolom kunci utama bertipe String.

Setelah membuat tabel, Anda harus menunggu tabel dimuat sebelum melakukan operasi data. Proses ini biasanya memakan waktu beberapa detik. Jika tidak menunggu, operasi akan gagal.
Penting

Anda tidak dapat mengubah metode enkripsi setelah tabel dibuat. Untuk membuat tabel terenkripsi, lihat Atur Enkripsi Tabel Data.

package org.example.ots;

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.*;

public class CreateTable {
    
    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 = "yourRegion"; // ID wilayah tempat instans Anda berada. Contoh: "cn-hangzhou".
        final String instanceName = "yourInstanceName"; // Nama instans Anda.
        final String endpoint = "yourEndpoint"; // Titik akhir instans Anda.

        SyncClient client = null;
        try {
            // Buat 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));

            // Definisikan skema tabel.
            TableMeta tableMeta = new TableMeta("test_table"); // TODO: Ubah nama tabel sesuai kebutuhan.
            // Anda harus menambahkan setidaknya satu kolom kunci utama untuk membuat tabel.
            tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("id", PrimaryKeyType.STRING)); // TODO: Ubah kunci utama tabel sesuai kebutuhan.

            // Konfigurasikan tabel.
            TableOptions tableOptions = new TableOptions();
            // Anda harus menentukan jumlah versi maksimum saat membuat tabel data.
            tableOptions.setMaxVersions(1);
            // Anda harus menentukan masa hidup data (TTL) saat membuat tabel data. Nilai -1 berarti data tidak pernah kedaluwarsa.
            tableOptions.setTimeToLive(-1);

            // Buat dan kirim permintaan.
            CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
            client.createTable(request);

            System.out.println("Tabel data telah dibuat.");
        } catch (Exception e) {
            System.err.println("Gagal membuat tabel data. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan klien.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Tambahkan kunci utama

Anda dapat menambahkan kunci utama menggunakan metode addPrimaryKeyColumn atau addPrimaryKeyColumns. Contoh berikut menggunakan metode addPrimaryKeyColumn.

tableMeta.addPrimaryKeyColumn("name", PrimaryKeyType.STRING);

Tambahkan kolom pradefinisi

Anda dapat menambahkan kolom pradefinisi menggunakan metode addDefinedColumn atau addDefinedColumns. Contoh berikut menggunakan metode addDefinedColumn.

tableMeta.addDefinedColumn("age", DefinedColumnType.INTEGER);

Atur offset versi maksimum

Anda dapat mengatur offset versi maksimum menggunakan metode setMaxTimeDeviation.

tableOptions.setMaxTimeDeviation(86400);

Atur apakah pembaruan diizinkan

Anda dapat menggunakan metode setAllowUpdate untuk menentukan apakah pembaruan data diizinkan di tabel.

tableOptions.setAllowUpdate(false);

Tambahkan indeks sekunder

Anda dapat menambahkan indeks sekunder dengan menentukan parameter indexMetas saat membuat permintaan.

// Buat daftar indeks sekunder.
ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
// Buat indeks sekunder.
IndexMeta indexMeta = new IndexMeta("test_table_idx");
// Atur kunci utama indeks.
indexMeta.addPrimaryKeyColumn("id");
// Untuk menambahkan lebih banyak kolom kunci utama, definisikan terlebih dahulu kunci utama atau kolom pradefinisi yang sesuai di tabel data.
// indexMeta.addPrimaryKeyColumn("additional_column");

// Atur tipe indeks.
indexMeta.setIndexType(IndexType.IT_LOCAL_INDEX);
// Atur mode pembaruan indeks.
indexMeta.setIndexUpdateMode(IndexUpdateMode.IUM_SYNC_INDEX);
// Tambahkan indeks sekunder.
indexMetas.add(indexMeta);

// Buat permintaan.
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas);

Atur informasi aliran

Anda dapat mengatur informasi aliran menggunakan metode setStreamSpecification dari permintaan.

StreamSpecification streamSpecification = new StreamSpecification(true, 168);
request.setStreamSpecification(streamSpecification);

Aktifkan transaksi lokal

Anda dapat mengaktifkan transaksi lokal menggunakan metode setLocalTxnEnabled dari permintaan.

request.setLocalTxnEnabled(true);

Atur throughput baca/tulis yang dicadangkan

Anda dapat mengatur throughput baca/tulis yang dicadangkan untuk tabel menggunakan metode setReservedThroughput dari permintaan.

// Tetapkan throughput baca yang dicadangkan ke 10000 dan throughput tulis yang dicadangkan ke 5000.
ReservedThroughput reservedThroughput = new ReservedThroughput(10000, 5000);
request.setReservedThroughput(reservedThroughput);

Atur metode enkripsi tabel data

Anda dapat mengatur metode enkripsi tabel data menggunakan metode setSseSpecification dari permintaan.

  • Enkripsi KMS

    SSESpecification sseSpecification = new SSESpecification(true, SSEKeyType.SSE_KMS_SERVICE);
    request.setSseSpecification(sseSpecification);
  • Enkripsi BYOK

    Catatan

    Sebelum menjalankan kode, Anda harus mendapatkan ID kunci master pelanggan (CMK) dan ARN peran RAM. Untuk informasi lebih lanjut, lihat Enkripsi BYOK.

    String keyId = "key-hzz6*****************";
    String roleArn = "acs:ram::1705************:role/tabletorebyok";
    SSESpecification sseSpecification = new SSESpecification(true, SSEKeyType.SSE_BYOK, keyId, roleArn);
    request.setSseSpecification(sseSpecification);

Referensi