全部產品
Search
文件中心

Tablestore:虛擬列

更新時間:Jul 25, 2026

Java SDK 可使用虛擬列將源欄位對應為其他索引欄位類型,無需修改資料表結構或重寫資料。

前提條件

開始前,完成以下準備工作:

  • 安裝Tablestore Java SDK並初始化用戶端。

  • 資料表的最大版本數為 1。

  • 資料表的資料生命週期為 -1,或者已禁止通過 UpdateRow 更新資料。

注意事項

建立虛擬列時,源欄位和虛擬列必須符合以下類型轉換規則。

資料表欄位類型

虛擬欄欄位類型

String

Keyword(含數組)、FuzzyKeyword(含數組)、Text(含數組)、Long(含數組)、Double(含數組)、Date(含數組)、IP(含數組)、Geo-point(含數組)

Long

Keyword、FuzzyKeyword、Text、Date

Double

Keyword、FuzzyKeyword、Text

虛擬列只能用於查詢,不能通過 ColumnsToGet 返回欄位值。需要擷取欄位值時,請返回虛擬列映射的源欄位。

功能說明

虛擬列將資料表中的源欄位對應為另一種索引欄位類型。可以在建立多元索引時配置虛擬列,也可以通過動態修改 Schema 為已有多元索引添加虛擬列。配置完成後,使用虛擬列名稱查詢資料。

以下樣本示範完整流程:先建立包含虛擬列的多元索引,再使用虛擬列查詢資料。

建立虛擬列

以下樣本將 Keyword 源欄位 category 映射為 Long 虛擬列,並將 Long 源欄位 price 映射為 Keyword 虛擬列。

String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("category_as_long", FieldType.LONG)
                .setVirtualField(true)
                .setSourceFieldName("category"),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("price_as_keyword", FieldType.KEYWORD)
                .setVirtualField(true)
                .setSourceFieldName("price")));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);

建立請求成功後,等待多元索引資料同步完成,再執行查詢。

使用虛擬列查詢資料

以下樣本查詢 price_as_keyword 虛擬列等於字串 1000 的資料,並返回來源資料表中的列。

String tableName = "example_table";
String indexName = "example_index";
TermsQuery query = new TermsQuery();
query.setFieldName("price_as_keyword");
query.addTerm(ColumnValue.fromString("1000"));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(query);
searchQuery.setGetTotalCount(true);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());

參數說明

FieldSchema 包含以下定義虛擬列所需的參數。其他索引欄位參數請參見建立多元索引。

名稱

類型

說明

fieldName(必選)

String

虛擬列名稱,不能與索引中的其他欄位重名。

fieldType(必選)

FieldType

虛擬列的索引欄位類型,必須符合支援的類型轉換規則。

isVirtualField(必選)

Boolean

設定為 true,表示該欄位是虛擬列。

sourceFieldNames(必選)

List<String>

虛擬列映射的源欄位名稱列表。當前僅支援一個源欄位,通過 setSourceFieldName 設定。