虛擬列
使用虛擬列功能時,您可以通過修改多元索引Schema或者新建多元索引來實現(xiàn)新字段新數(shù)據(jù)類型的查詢功能,而無需修改表格存儲的存儲結構及數(shù)據(jù)。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已創(chuàng)建數(shù)據(jù)表,并且數(shù)據(jù)表的最大版本數(shù)(max Versions)必須為1,數(shù)據(jù)生命周期(Time to Live)必須滿足如下條件中的任意一個。具體操作,請參見創(chuàng)建數(shù)據(jù)表。
數(shù)據(jù)表的數(shù)據(jù)生命周期為-1(數(shù)據(jù)永不過期)。
數(shù)據(jù)表的數(shù)據(jù)生命周期不為-1時,數(shù)據(jù)表為禁止更新狀態(tài)(即是否允許更新為否)。
注意事項
- 虛擬列支持不同類型到字符串類型的相互轉換,轉換規(guī)則請參見下表。
數(shù)據(jù)表中字段類型 虛擬列字段類型 String Keyword(含數(shù)組) String Text(含數(shù)組) String Long(含數(shù)組) String Double(含數(shù)組) String Geo-point(含數(shù)組) Long Keyword Long Text Double Keyword Double Text - 虛擬列目前僅支持用在查詢語句中,不能用在ColumnsToGet返回列值,如果需要返回列值,可以指定返回該虛擬列的原始列。
參數(shù)
更多信息,請參見創(chuàng)建多元索引。
示例
創(chuàng)建多元索引時指定虛擬列。
以下示例用于創(chuàng)建一個多元索引,多元索引包含Col_Keyword和Col_Long兩列,同時創(chuàng)建虛擬列Col_Keyword_Virtual_Long和Col_Long_Virtual_Keyword。虛擬列Col_Keyword_Virtual_Long映射為數(shù)據(jù)表中Col_Keyword列,虛擬列Col_Long_Virtual_Keyword映射為數(shù)據(jù)表中Col_Long列。
private static void createSearchIndex(SyncClient client) { CreateSearchIndexRequest request = new CreateSearchIndexRequest(); //設置數(shù)據(jù)表名稱。 request.setTableName("<TABLE_NAME>"); //設置多元索引名稱。 request.setIndexName("<SEARCH_INDEX_NAME>"); IndexSchema indexSchema = new IndexSchema(); indexSchema.setFieldSchemas(Arrays.asList( //設置字段名和類型。 new FieldSchema("Col_Keyword", FieldType.KEYWORD), //設置字段名和類型。 new FieldSchema("Col_Keyword_Virtual_Long", FieldType.LONG) //設置字段是否為虛擬列。 .setVirtualField(true) //虛擬列對應的數(shù)據(jù)表中字段。 .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); //調(diào)用client創(chuàng)建多元索引。 client.createSearchIndex(request); }
使用虛擬列查詢數(shù)據(jù)。
以下示例用于查詢表中Col_Long_Virtual_Keyword列的值能夠匹配"1000"的數(shù)據(jù),返回匹配到的總行數(shù)和一些匹配成功的行。
private static void query(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); TermsQuery termsQuery = new TermsQuery(); //設置查詢類型為TermsQuery。 termsQuery.setFieldName("Col_Long_Virtual_Keyword"); //設置要匹配的字段。 termsQuery.addTerm(ColumnValue.fromString("1000")); //設置要匹配的值。 searchQuery.setQuery(termsQuery); searchQuery.setGetTotalCount(true); //設置返回匹配的總行數(shù)。 SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); columnsToGet.setReturnAll(true); //設置返回所有列,不支持返回虛擬列。 searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); System.out.println("TotalCount: " + resp.getTotalCount()); //匹配到的總行數(shù),非返回行數(shù)。 System.out.println("Row: " + resp.getRows()); }
相關文檔
多元索引查詢類型包括精確查詢、多詞精確查詢、全匹配查詢、匹配查詢、短語匹配查詢、前綴查詢、范圍查詢、通配符查詢、地理位置查詢、向量檢索、多條件組合查詢、嵌套類型查詢和列存在性查詢,您可以選擇合適的查詢類型進行多維度數(shù)據(jù)查詢。
如果要對結果集進行排序或者翻頁,您可以使用排序和翻頁功能來實現(xiàn)。具體操作,請參見排序和翻頁。
如果要按照某一列對結果集做折疊,使對應類型的數(shù)據(jù)在結果展示中只出現(xiàn)一次,您可以使用折疊(去重)功能來實現(xiàn)。具體操作,請參見折疊(去重)。
如果要進行數(shù)據(jù)分析,例如求最值、求和、統(tǒng)計行數(shù)等,您可以使用Search接口的統(tǒng)計聚合功能或者SQL查詢來實現(xiàn)。具體操作,請參見統(tǒng)計聚合和SQL查詢。
如果要快速導出數(shù)據(jù),而不關心整個結果集的順序時,您可以使用ParallelScan接口和ComputeSplits接口實現(xiàn)多并發(fā)導出數(shù)據(jù)。具體操作,請參見并發(fā)導出數(shù)據(jù)。