Fitur indeks sekunder memungkinkan Anda mengkueri data berdasarkan kunci utama dari tabel data dan kolom indeks dari indeks sekunder yang dibuat untuk tabel tersebut. Jika ingin menggunakan kolom atribut dari tabel data untuk mengkueri data, Anda dapat membuat indeks sekunder untuk mempercepat proses kueri. Saat membuat indeks sekunder, Anda dapat menetapkan kolom indeks atau kolom atribut dari indeks sekunder ke kolom yang telah ditentukan sebelumnya saat pembuatan tabel data. Setelah membuat indeks sekunder, Anda dapat menggunakannya untuk mengkueri data.
Prasyarat
Tabel data dengan parameter Max Versions diatur ke 1 telah dibuat. Salah satu kondisi berikut harus dipenuhi oleh parameter TTL tabel data:
Parameter TTL tabel data diatur ke -1, yang berarti data dalam tabel tidak pernah kedaluwarsa.
Jika parameter TTL tabel data tidak diatur ke -1, parameter Allow Updates harus diatur ke No.
TTL dari indeks sekunder sama dengan TTL dari tabel data.
Langkah 1: (Opsional) Kelola kolom yang telah ditentukan sebelumnya
Jika Anda membuat indeks sekunder untuk tabel yang tidak memiliki kolom yang telah ditentukan sebelumnya atau jika kolom yang ada tidak memenuhi persyaratan bisnis Anda, Anda dapat menambahkan atau menghapus kolom tersebut. Anda dapat menggunakan Tablestore SDK for Java atau Tablestore SDK for Go untuk mengelola kolom yang telah ditentukan sebelumnya. Dalam contoh ini, Tablestore SDK for Java digunakan untuk menjelaskan cara mengelola kolom tersebut.
Tambahkan kolom yang telah ditentukan sebelumnya
Hapus kolom yang telah ditentukan sebelumnya
Anda dapat menghapus kolom yang telah ditentukan sebelumnya yang tidak lagi diperlukan dari tabel data.
Langkah 2: Buat indeks sekunder
Anda dapat memanggil operasi CreateIndex untuk membuat tabel indeks pada tabel data yang sudah ada guna mempercepat kueri data. Indeks sekunder diklasifikasikan menjadi indeks sekunder global dan lokal. Anda dapat membuat salah satu jenis indeks berdasarkan kebutuhan bisnis Anda.
Anda dapat membuat satu atau lebih tabel indeks saat membuat tabel data dengan memanggil operasi CreateTable. Untuk informasi lebih lanjut, lihat Buat Tabel Data.
Anda dapat menggunakan Tablestore SDK for Java, Tablestore SDK for Go, Tablestore SDK for Python, Tablestore SDK for Node.js, Tablestore SDK for .NET, atau Tablestore SDK for PHP untuk membuat indeks sekunder. Dalam contoh ini, Tablestore SDK for Java digunakan untuk menjelaskan cara membuat indeks sekunder.
Buat indeks sekunder global
Kode sampel berikut menunjukkan cara membuat indeks sekunder global untuk tabel data:
private static void createIndex(SyncClient client) {
// Tentukan nama tabel indeks.
IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
// Tentukan kolom DEFINED_COL_NAME_1 sebagai kolom kunci utama pertama dari tabel indeks.
indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_1);
// Tentukan kolom PRIMARY_KEY_NAME_2 sebagai kolom kunci utama kedua dari tabel indeks.
indexMeta.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2);
// Tentukan kolom DEFINED_COL_NAME_2 sebagai kolom atribut dari tabel indeks.
indexMeta.addDefinedColumn(DEFINED_COL_NAME_2);
// Tentukan tabel data untuk mana Anda ingin membuat tabel indeks dan tentukan bahwa tabel indeks mencakup data yang sudah ada dari tabel data. Terapkan pengaturan yang Anda tentukan untuk tabel indeks.
//CreateIndexRequest request = new CreateIndexRequest("<TABLE_NAME>", indexMeta, true);
// Tentukan tabel data untuk mana Anda ingin membuat tabel indeks dan tentukan bahwa tabel indeks tidak mencakup data yang sudah ada dari tabel data. Terapkan pengaturan yang Anda tentukan untuk tabel indeks.
CreateIndexRequest request = new CreateIndexRequest("<TABLE_NAME>", indexMeta, false);
/**Anda dapat mengatur parameter IncludeBaseData ke true untuk menyinkronkan data yang sudah ada dari tabel data ke tabel indeks setelah tabel indeks dibuat. Kemudian, Anda dapat mengkueri semua data dari tabel indeks.
Jumlah waktu yang diperlukan untuk menyinkronkan data yang sudah ada dari tabel data ke tabel indeks bervariasi berdasarkan jumlah data dalam tabel data.
*/
//request.setIncludeBaseData(true);
// Buat tabel indeks.
client.createIndex(request);
}Buat indeks sekunder lokal
Kode sampel berikut menunjukkan cara membuat indeks sekunder lokal:
private static void createIndex(SyncClient client) {
// Tentukan nama tabel indeks.
IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
// Tentukan kolom PRIMARY_KEY_NAME_1 sebagai kolom kunci utama pertama dari tabel indeks.
// Kolom kunci utama pertama dari indeks sekunder lokal harus sama dengan kolom kunci utama pertama dari tabel data.
indexMeta.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1);
// Tentukan kolom DEFINED_COL_NAME_1 sebagai kolom kunci utama kedua dari tabel indeks.
indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_1);
// Tentukan kolom DEFINED_COL_NAME_2 sebagai kolom atribut dari tabel indeks.
indexMeta.addDefinedColumn(DEFINED_COL_NAME_2);
// Atur tipe indeks ke indeks sekunder lokal (IT_LOCAL_INDEX).
indexMeta.setIndexType(IT_LOCAL_INDEX);
// Atur mode pembaruan indeks ke pembaruan sinkron (IUM_SYNC_INDEX).
indexMeta.setIndexUpdateMode(IUM_SYNC_INDEX);
// Tentukan tabel data untuk mana Anda ingin membuat tabel indeks dan tentukan bahwa tabel indeks mencakup data yang sudah ada dari tabel data. Terapkan pengaturan yang Anda tentukan untuk tabel indeks.
//CreateIndexRequest request = new CreateIndexRequest("<TABLE_NAME>", indexMeta, true);
// Tentukan tabel data untuk mana Anda ingin membuat tabel indeks dan tentukan bahwa tabel indeks tidak mencakup data yang sudah ada dari tabel data. Terapkan pengaturan yang Anda tentukan untuk tabel indeks.
CreateIndexRequest request = new CreateIndexRequest("<TABLE_NAME>", indexMeta, false);
/**Anda dapat mengatur parameter IncludeBaseData ke true untuk menyinkronkan data yang sudah ada dari tabel data ke tabel indeks setelah tabel indeks dibuat. Kemudian, Anda dapat mengkueri semua data dari tabel indeks.
Jumlah waktu yang diperlukan untuk menyinkronkan data yang sudah ada dari tabel data ke tabel indeks bervariasi berdasarkan jumlah data dalam tabel data.
*/
//request.setIncludeBaseData(true);
// Buat tabel indeks.
client.createIndex(request);
}Langkah 3: Baca data dari tabel indeks
Saat membaca baris tunggal data atau data dengan nilai kunci utama dalam rentang tertentu dalam tabel indeks, jika kolom atribut yang ingin Anda kembalikan terkandung dalam tabel indeks, Anda dapat membaca tabel indeks untuk mendapatkan data yang diperlukan. Sebaliknya, Anda harus membaca tabel data untuk mendapatkan data tersebut.
Anda dapat menggunakan Tablestore SDK for Java, Tablestore SDK for Go, Tablestore SDK for Python, Tablestore SDK for Node.js, Tablestore SDK for .NET, atau Tablestore SDK for PHP untuk membaca data dari indeks sekunder. Dalam contoh ini, Tablestore SDK for Java digunakan untuk menjelaskan cara membaca data dari indeks sekunder.
Baca baris tunggal data
Kode sampel berikut menunjukkan cara membaca baris data:
Kode sampel berikut menunjukkan cara membaca kolom atribut tertentu dari baris dalam tabel indeks:
private static void getRowFromIndex(SyncClient client) {
// Bangun kunci utama. Jika Anda ingin membaca data dari indeks sekunder lokal, kolom kunci utama pertama dari tabel indeks harus sama dengan kolom kunci utama pertama dari tabel data.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.fromString("def1"));
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.fromLong(100));
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.fromString("pri1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel indeks dari mana Anda ingin membaca baris data dan kunci utama baris tersebut.
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<INDEX_NAME>", primaryKey);
// Atur parameter MaxVersions ke 1 untuk membaca versi terbaru dari data.
criteria.setMaxVersions(1);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row row = getRowResponse.getRow();
// Jika baris yang ingin Anda baca tidak ada, null akan dikembalikan.
System.out.println("Baca selesai. Hasil:");
System.out.println(row);
// Tentukan kolom atribut yang ingin Anda baca.
criteria.addColumnsToGet("Col0");
getRowResponse = client.getRow(new GetRowRequest(criteria));
row = getRowResponse.getRow();
System.out.println("Baca selesai. Hasil:");
System.out.println(row);
} Baca data yang nilai kunci utamanya berada dalam rentang tertentu
Anda dapat membaca data dengan nilai kunci utama dalam rentang tertentu.
Gunakan indeks sekunder global
Jika tabel indeks mengandung kolom atribut yang ingin Anda kembalikan, Anda dapat mengkueri data yang diperlukan dari tabel indeks.
private static void scanFromIndex(SyncClient client) {
// Tentukan nama tabel indeks.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<INDEX_NAME>");
// Tentukan kunci utama awal dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MIN);
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKeyBuilder.build());
// Tentukan kunci utama akhir dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MAX);
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
System.out.println("Hasil yang dikembalikan dari tabel indeks:");
while (true) {
GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
System.out.println(row);
}
// Jika parameter nextStartPrimaryKey tidak null dalam respons, lanjutkan membaca data.
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
}Jika tabel indeks tidak mengandung kolom atribut yang ingin Anda kembalikan, Anda perlu mengkueri data yang diperlukan dari tabel data.
private static void scanFromIndex(SyncClient client) {
// Tentukan nama tabel indeks.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<INDEX_NAME>");
// Tentukan kunci utama awal dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MIN);
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKeyBuilder.build());
// Tentukan kunci utama akhir dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MAX);
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
while (true) {
GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
PrimaryKey curIndexPrimaryKey = row.getPrimaryKey();
PrimaryKeyColumn pk1 = curIndexPrimaryKey.getPrimaryKeyColumn(PRIMARY_KEY_NAME_1);
PrimaryKeyColumn pk2 = curIndexPrimaryKey.getPrimaryKeyColumn(PRIMARY_KEY_NAME_2);
PrimaryKeyBuilder mainTablePKBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
mainTablePKBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, pk1.getValue());
mainTablePKBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, pk2.getValue());
// Tentukan kunci utama tabel data berdasarkan kunci utama tabel indeks.
PrimaryKey mainTablePK = mainTablePKBuilder.build();
// Kueri data dari tabel data.
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", mainTablePK);
// Tentukan kolom atribut yang ingin Anda kembalikan. Dalam contoh ini, kolom DEFINED_COL_NAME_3 dikembalikan.
criteria.addColumnsToGet(DEFINED_COL_NAME_3);
// Atur parameter MaxVersions ke 1 untuk membaca versi terbaru dari data.
criteria.setMaxVersions(1);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row mainTableRow = getRowResponse.getRow();
System.out.println(row);
}
// Jika parameter nextStartPrimaryKey tidak null dalam respons, lanjutkan membaca data.
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
}Gunakan indeks sekunder lokal
Jika tabel indeks mengandung kolom atribut yang ingin Anda kembalikan, Anda dapat mengkueri data yang diperlukan dari tabel indeks.
private static void scanFromIndex(SyncClient client) {
// Tentukan nama tabel indeks.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("INDEX_NAME");
// Tentukan kunci utama awal dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MIN);
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKeyBuilder.build());
// Tentukan kunci utama akhir dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MAX);
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
System.out.println("Hasil yang dikembalikan dari tabel indeks:");
while (true) {
GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
System.out.println(row);
}
// Jika parameter nextStartPrimaryKey tidak null dalam respons, lanjutkan membaca data.
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
}Jika tabel indeks tidak mengandung kolom atribut yang ingin Anda kembalikan, Anda perlu mengkueri data yang diperlukan dari tabel data.
private static void scanFromIndex(SyncClient client) {
// Tentukan nama tabel indeks.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<INDEX_NAME>");
// Tentukan kunci utama awal dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MIN);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas kecil.
startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MIN);
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKeyBuilder.build());
// Tentukan kunci utama akhir dari rentang yang ingin Anda kueri.
PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
// Atur nilai kolom indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MAX);
// Atur nilai kolom kunci utama dari tabel data yang tidak ditentukan sebagai kolom indeks dalam tabel indeks ke nilai tak terbatas besar.
endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MAX);
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
while (true) {
GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
PrimaryKey curIndexPrimaryKey = row.getPrimaryKey();
PrimaryKeyColumn pk1 = curIndexPrimaryKey.getPrimaryKeyColumn(PRIMARY_KEY_NAME_1);
PrimaryKeyColumn pk2 = curIndexPrimaryKey.getPrimaryKeyColumn(PRIMARY_KEY_NAME_2);
PrimaryKeyBuilder mainTablePKBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
mainTablePKBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, pk1.getValue());
mainTablePKBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, pk2.getValue());
// Tentukan kunci utama tabel data berdasarkan kunci utama tabel indeks.
PrimaryKey mainTablePK = mainTablePKBuilder.build();
// Kueri data dari tabel data.
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("TABLE_NAME", mainTablePK);
// Tentukan kolom atribut yang ingin Anda kembalikan dari tabel data. Dalam contoh ini, kolom DEFINED_COL_NAME3 dikembalikan.
criteria.addColumnsToGet(DEFINED_COL_NAME3);
// Atur parameter MaxVersions ke 1 untuk membaca versi terbaru dari data.
criteria.setMaxVersions(1);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row mainTableRow = getRowResponse.getRow();
System.out.println(row);
}
// Jika parameter nextStartPrimaryKey tidak null dalam respons, lanjutkan membaca data.
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
}Lampiran: Menghapus tabel indeks
Bagian ini menjelaskan cara menghapus tabel indeks yang tidak lagi diperlukan.
Anda dapat menggunakan Tablestore SDK for Java, Tablestore SDK for Go, Tablestore SDK for Python, Tablestore SDK for Node.js, Tablestore SDK for .NET, atau Tablestore SDK for PHP untuk menghapus indeks sekunder. Dalam contoh ini, Tablestore SDK for Java digunakan untuk menjelaskan cara menghapus indeks sekunder.
Kode sampel berikut menunjukkan cara menghapus indeks sekunder.
private static void deleteIndex(SyncClient client) {
// Tentukan nama tabel data dan indeks sekunder.
DeleteIndexRequest request = new DeleteIndexRequest("<TABLE_NAME>", "<INDEX_NAME>");
// Hapus indeks sekunder.
client.deleteIndex(request);
}FAQ
Referensi
Anda dapat menggunakan indeks sekunder di konsol Tablestore atau CLI Tablestore. Untuk informasi lebih lanjut, lihat Gunakan Indeks Sekunder di Konsol Tablestore dan Indeks Sekunder.
Jika Anda ingin menanyakan data dengan cara yang lebih efisien dan fleksibel, Anda dapat menggunakan fitur indeks pencarian. Fitur ini menyediakan beberapa metode penanyaian, termasuk penanyaian Boolean, pencarian teks lengkap, penanyaian awalan, dan penanyaian kabur. Untuk informasi lebih lanjut, lihat Ikhtisar.