Ikhtisar fitur
Fitur kolom virtual memungkinkan Anda memetakan kolom dalam tabel ke kolom virtual dalam indeks pencarian saat membuat indeks tersebut. Tipe kolom virtual dapat berbeda dari tipe kolom di tabel, sehingga Anda dapat membuat kolom yang digunakan untuk mempercepat kueri atau dikonfigurasi dengan pemisah kata berbeda tanpa mengubah skema tabel atau datanya.
Dukungan pemisah kata berbeda pada bidang Text
Satu kolom string dapat dipetakan ke beberapa kolom Text dalam indeks pencarian. Anda dapat menggunakan pemisah kata berbeda untuk setiap kolom Text guna memenuhi berbagai kebutuhan bisnis.
Akselerasi kueri
Anda tidak perlu membersihkan data atau membuat ulang skema tabel. Anda dapat memetakan kolom yang sesuai ke tipe lain untuk meningkatkan performa kueri dalam beberapa skenario. Misalnya, mengonversi tipe numerik ke tipe Keyword dapat meningkatkan performa kueri tepat, sedangkan mengonversi tipe String ke tipe numerik dapat meningkatkan performa kueri rentang.
Catatan penggunaan
Kolom virtual mendukung konversi antara tipe string dan tipe data lainnya. Untuk informasi selengkapnya tentang aturan transformasi, lihat tabel berikut.
Tipe bidang dalam tabel data | Tipe bidang kolom virtual |
String | Keyword (dan array) |
FuzzyKeyword (dan array) |
Text (dan array) |
Long (dan array) |
Double (dan array) |
Date (dan array) |
IP (dan array) |
Geo-point (dan array) |
Long | Keyword |
FuzzyKeyword |
Text |
Date |
Double | Keyword |
FuzzyKeyword |
Text |
Kolom virtual hanya dapat digunakan dalam pernyataan pencarian. Kolom ini tidak dapat digunakan dalam ColumnsToGet untuk mengembalikan nilai kolom. Untuk mengembalikan nilai kolom, Anda harus menentukan kolom asli yang dipetakan ke kolom virtual tersebut.
Metode
Anda dapat melakukan operasi kolom virtual melalui Konsol Tablestore atau SDK. Sebelum memulai, lakukan persiapan berikut.
Gunakan Akun Alibaba Cloud atau Pengguna Resource Access Management (RAM) yang memiliki izin untuk mengelola Tablestore. Untuk memberikan izin kepada Pengguna RAM, lihat Berikan izin kepada Pengguna RAM menggunakan kebijakan RAM.
Jika Anda menggunakan SDK dan belum memiliki AccessKey yang tersedia, buat AccessKey untuk Akun Alibaba Cloud atau Pengguna RAM Anda. Untuk informasi selengkapnya, lihat Buat AccessKey.
Tabel data telah dibuat. Untuk informasi selengkapnya, lihat Operasi tabel data.
Jika Anda menggunakan SDK, Anda juga harus menginisialisasi client. Untuk informasi selengkapnya, lihat Inisialisasi client Tablestore.
Operasikan kolom virtual di konsol
Setelah menentukan suatu bidang sebagai kolom virtual saat membuat indeks pencarian di Konsol Tablestore, Anda dapat menggunakan kolom virtual tersebut untuk melakukan kueri data.
Buka tab Index Management.
Masuk ke Konsol Tablestore.
Pada bilah navigasi atas, pilih wilayah dan kelompok sumber daya.
Pada halaman Overview, klik nama instans atau klik Manage Instance di kolom Actions.
Di bagian Data Table List pada tab Instance Details, klik nama tabel data atau klik Index Management di kolom Actions.
Pada tab Index Management, klik Create Search Index.
Pada dialog Create Index, tentukan kolom virtual saat membuat indeks pencarian.

Sistem secara otomatis menghasilkan nama indeks. Anda juga dapat memasukkan Index Name kustom.
Pilih Schema Generation Method.
Jika Anda mengatur Schema Generation Method ke Manual Entry, masukkan nama bidang secara manual, pilih tipe bidang, dan tentukan apakah akan mengaktifkan Array.
Jika Anda mengatur Schema Generation Method ke Automatic Generation, sistem secara otomatis menggunakan kolom kunci primer dan kolom atribut dari tabel data sebagai bidang indeks. Anda kemudian dapat memilih tipe bidang dan menentukan apakah akan mengaktifkan Array sesuai kebutuhan.
Catatan Field Name dan Field Type harus sesuai dengan yang ada di tabel data. Untuk informasi selengkapnya tentang pemetaan antara tipe bidang tabel data dan tipe bidang indeks pencarian, lihat Tipe data.
Buat kolom virtual.
Penting Saat membuat kolom virtual, nama bidang sumber harus ada di tabel data, dan tipe data bidang sumber harus kompatibel dengan tipe data kolom virtual.
Klik ikon
.
Masukkan Field Name dan pilih Field Type.
Aktifkan sakelar Virtual Column untuk bidang tersebut dan masukkan Source Field Name.
Untuk mengonfigurasi routing key, masa hidup data, atau metode pra-pengurutan untuk indeks pencarian, aktifkan sakelar Advanced Options dan ubah parameter sesuai kebutuhan. Untuk informasi selengkapnya, lihat Buat indeks pencarian.
Klik OK.
Setelah indeks pencarian dibuat, Anda dapat mengklik Index Details di kolom Actions indeks pencarian untuk melihat informasi dasar, metering, routing key, bidang indeks, dan informasi pra-pengurutan untuk indeks tersebut.
Lakukan kueri data menggunakan kolom virtual.
Di kolom Actions indeks pencarian, klik Search.
Pada dialog Query Data, konfigurasikan kueri.

Secara default, sistem mengembalikan semua kolom. Untuk mengembalikan kolom atribut tertentu, nonaktifkan Get All Columns dan masukkan nama kolom atribut yang ingin dikembalikan. Pisahkan beberapa nama kolom atribut dengan koma (,).
Pilih bidang indeks, klik Add, lalu atur tipe kueri dan nilainya untuk bidang indeks tersebut.
Secara default, fitur pengurutan dinonaktifkan. Untuk mengurutkan hasil kueri berdasarkan bidang indeks, aktifkan sakelar Sort, lalu tambahkan bidang indeks dan konfigurasikan metode pengurutan sesuai kebutuhan.
Secara default, fitur agregasi dinonaktifkan. Jika Anda ingin mengumpulkan statistik pada bidang tertentu, aktifkan Collect Statistics, tentukan bidang yang akan dikumpulkan statistiknya, lalu konfigurasikan informasi yang diperlukan untuk pengumpulan statistik tersebut.
Klik OK.
Data yang memenuhi kondisi kueri ditampilkan pada tab Index Management.
Operasikan kolom virtual menggunakan SDK
Setelah menentukan suatu bidang sebagai kolom virtual saat membuat indeks pencarian menggunakan SDK, Anda dapat menggunakan kolom virtual tersebut untuk melakukan kueri data.
Tentukan kolom virtual saat membuat indeks pencarian.
Contoh berikut membuat indeks pencarian yang berisi kolom Col_Keyword dan Col_Long. Contoh ini juga membuat dua kolom virtual: Col_Keyword_Virtual_Long, yang dipetakan ke kolom Col_Keyword di tabel data, dan Col_Long_Virtual_Keyword, yang dipetakan ke kolom Col_Long di tabel data.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Set the data table name.
request.setTableName("<TABLE_NAME>");
// Set the search index name.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Set the field name and type.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
// Set the field name and type.
new FieldSchema("Col_Keyword_Virtual_Long", FieldType.LONG)
// Specify whether the field is a virtual column.
.setVirtualField(true)
// The source field in the data table to which the virtual column is mapped.
.setSourceFieldName("Col_Keyword"),
new FieldSchema("Col_Long", FieldType.LONG),
new FieldSchema("Col_Long_Virtual_Keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldName("Col_Long")));
request.setIndexSchema(indexSchema);
// Call the client to create the search index.
client.createSearchIndex(request);
}
Lakukan kueri data menggunakan kolom virtual.
Contoh berikut menunjukkan cara melakukan kueri untuk baris-baris yang nilai kolom Col_Long_Virtual_Keyword-nya adalah "1000". Kueri ini mengembalikan jumlah total baris yang cocok dan beberapa baris yang cocok.
private static void query(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
TermsQuery termsQuery = new TermsQuery(); // Set the query type to TermsQuery.
termsQuery.setFieldName("Col_Long_Virtual_Keyword"); // Set the field to match.
termsQuery.addTerm(ColumnValue.fromString("1000")); // Set the value to match.
searchQuery.setQuery(termsQuery);
searchQuery.setGetTotalCount(true); // Set to return the total number of matched rows.
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true); // Set to return all columns. Virtual columns are not returned.
searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
System.out.println("TotalCount: " + resp.getTotalCount()); // The total number of matched rows, not the number of returned rows.
System.out.println("Row: " + resp.getRows());
}