すべてのプロダクト
Search
ドキュメントセンター

Tablestore:仮想カラムの使用

最終更新日:Jul 25, 2026

Tablestore SDK for Java は、仮想カラムを使用して、テーブルスキーマの変更やデータの書き換えを行うことなく、ソースフィールドをさまざまなインデックスフィールドタイプにマッピングできます。

前提条件

開始する前に、次のことを確認してください。

  • Tablestore SDK for Java がインストールされ、クライアントが初期化されていること

  • テーブルの最大バージョン数が 1 に設定されていること

  • テーブルの TTL が -1 に設定されているか、UpdateRow によるテーブルの更新が無効になっていること

使用上の注意

仮想カラムを作成する際、ソースフィールドと仮想カラムは、次の型変換ルールに準拠している必要があります。

ソースフィールドタイプ

仮想カラムタイプ

文字列

キーワード (配列を含む)、ファジーキーワード (配列を含む)、テキスト (配列を含む)、ロング (配列を含む)、ダブル (配列を含む)、日付 (配列を含む)、IP (配列を含む)、ジオポイント (配列を含む)

ロング

キーワード、ファジーキーワード、テキスト、日付

ダブル

キーワード、ファジーキーワード、テキスト

仮想カラムはクエリでのみ使用でき、ColumnsToGet では返されません。値を取得するには、仮想カラムにマッピングされているソースフィールドを返す必要があります。

説明

仮想カラムは、ソーステーブルのフィールドを異なる検索インデックスフィールドタイプにマッピングします。仮想カラムは、検索インデックスの作成時に設定するか、既存のインデックスのスキーマを動的に変更して追加します。マッピングが作成された後、仮想カラム名でデータをクエリします。

次の例では、仮想カラムを持つ検索インデックスを作成し、その仮想カラムの 1 つを使用してデータをクエリするという一連のワークフローを示します。

仮想カラムの作成

次の例では、キーワード型のソースフィールド category をロング型の仮想カラムに、ロング型のソースフィールド price をキーワード型の仮想カラムにマッピングします。

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 (必須)

文字列

仮想カラム名。名前はインデックス内で一意である必要があります。

fieldType (必須)

FieldType

仮想カラムの検索インデックスフィールドタイプ。タイプは、サポートされている変換ルールに準拠している必要があります。

isVirtualField (必須)

ブール値

フィールドを仮想列として識別するには、このパラメーターを true に設定します。

sourceFieldNames (必須)

List<String>

仮想列にマッピングするソースフィールド名。現在、1 つのソースフィールドのみがサポートされています。setSourceFieldName で設定します。