Fitur kolom virtual memungkinkan Anda melakukan kueri terhadap bidang dan tipe data baru dengan memodifikasi skema indeks pencarian atau membuat indeks pencarian baru, tanpa mengubah struktur penyimpanan atau data di Tablestore.
Prasyarat
Client Tablestore telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize a Tablestore client.
Tabel data telah dibuat dan memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Create a data table.
Jumlah versi maksimum harus bernilai 1.
Masa hidup data bernilai -1, atau pembaruan pada tabel data dilarang.
Catatan penggunaan
Kolom virtual mendukung konversi antara tipe string dan tipe data lainnya. Untuk informasi lebih lanjut mengenai aturan transformasi, lihat tabel berikut.
Tipe bidang di 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 tersebut tidak dapat digunakan dalam ColumnsToGet untuk mengembalikan nilai. Untuk mengembalikan nilai kolom, Anda harus menentukan kolom asli yang dipetakan ke kolom virtual tersebut.
Parameter
Untuk informasi selengkapnya, lihat Create a search index.
Contoh
Tentukan kolom virtual saat membuat indeks pencarian.
Contoh berikut membuat indeks pencarian dengan dua 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. .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); // Create the search index. client.createSearchIndex(request); }Gunakan kolom virtual untuk melakukan kueri data.
Contoh berikut menunjukkan cara melakukan kueri terhadap baris-baris yang nilai kolom Col_Long_Virtual_Keyword-nya adalah "1000". Kueri ini mengembalikan jumlah total baris yang cocok dan sebagian dari baris tersebut.
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); // 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); // Return all columns. Virtual columns cannot be 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 rows in this response. System.out.println("Row: " + resp.getRows()); }
Referensi
Saat menggunakan indeks pencarian untuk melakukan kueri data, Anda dapat menggunakan metode kueri berikut: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, KNN vector query, Boolean query, nested query, dan exists query. Setelah membuat indeks pencarian, Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk melakukan kueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur pengurutan dan penjedaan halaman. Untuk informasi selengkapnya, lihat Perform sorting and paging.
Anda dapat menggunakan fitur collapse (distinct) untuk menciutkan set hasil berdasarkan kolom tertentu sehingga data dari tipe yang ditentukan hanya muncul sekali dalam hasil kueri. Untuk informasi selengkapnya, lihat Collapse (distinct).
Jika ingin menganalisis data dalam tabel, Anda dapat memanggil operasi Search untuk menggunakan fitur agregasi atau menggunakan fitur kueri SQL. Misalnya, Anda dapat melakukan kueri terhadap nilai maksimum dan minimum, jumlah nilai, serta jumlah baris. Untuk informasi selengkapnya, lihat Aggregation dan SQL query.
Jika ingin mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris tersebut, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi selengkapnya, lihat Parallel scan.