虚拟列

更新时间:
复制 MD 格式

Python SDK 可使用虚拟列将源字段映射为其他索引字段类型,无需修改数据表结构或重写数据。

前提条件

开始前,完成以下准备工作:

  • 安装Tablestore Python SDK并初始化客户端。

  • 数据表的最大版本数为 1。

  • 数据表的数据生命周期为 -1,或者已禁止通过 UpdateRow 更新数据。

注意事项

创建虚拟列时,数据表中的源字段和虚拟列必须符合以下类型转换规则。下表仅列出 Python SDK 支持配置的虚拟列类型。

数据表字段类型

虚拟列字段类型

String

Keyword(含数组)、Text(含数组)、Long(含数组)、Double(含数组)、Date(含数组)、Geo-point(含数组)

Long

Keyword、Text、Date

Double

Keyword、Text

虚拟列只能用于查询,不能通过 ColumnsToGet 返回字段值。需要获取字段值时,请返回虚拟列映射的源字段。

功能说明

虚拟列将数据表中的源字段映射为另一种多元索引字段类型。Python SDK 支持在创建多元索引时配置虚拟列,当前不支持通过动态修改 Schema 为已有多元索引添加虚拟列。配置完成后,使用虚拟列名称查询数据。

以下示例先创建包含虚拟列的多元索引,再使用虚拟列查询已写入的数据。

创建虚拟列

以下示例将 Keyword 源字段 category 映射为 Long 虚拟列,并将 Long 源字段 price 映射为 Keyword 虚拟列。

table_name = "example_table"
index_name = "example_index"

fields = [
    FieldSchema("category", FieldType.KEYWORD, index=True),
    FieldSchema(
        "category_as_long", FieldType.LONG, index=True,
        is_virtual_field=True, source_fields=["category"]),
    FieldSchema("price", FieldType.LONG, index=True),
    FieldSchema(
        "price_as_keyword", FieldType.KEYWORD, index=True,
        is_virtual_field=True, source_fields=["price"]),
]
index_meta = SearchIndexMeta(fields)

client.create_search_index(table_name, index_name, index_meta)

创建请求成功后,等待多元索引数据同步完成,再执行查询。

使用虚拟列查询数据

以下示例查询 price_as_keyword 虚拟列等于字符串 1000 的数据,并返回源数据表中的列。

query = TermQuery("price_as_keyword", "1000")
search_query = SearchQuery(
    query,
    get_total_count=True,
    limit=10,
)
columns_to_get = ColumnsToGet(return_type=ColumnReturnType.ALL)

response = client.search(
    "example_table", "example_index", search_query, columns_to_get)
print(response.total_count)
print(response.rows)

参数说明

FieldSchema 包含以下定义虚拟列所需的参数。其他索引字段参数请参见创建多元索引

名称

类型

说明

field_name(必选)

str

虚拟列名称,不能与多元索引中的其他字段重名。

field_type(必选)

FieldType

虚拟列的索引字段类型,必须符合支持的类型转换规则。

index(可选)

bool

是否为虚拟列建立索引。使用虚拟列查询数据时必须设置为 True。默认值为 False

is_virtual_field(必选)

bool

设置为 True,表示该字段是虚拟列。

source_fields(必选)

List[str]

虚拟列映射的源字段名称列表。当前仅支持一个源字段。

is_array(可选)

bool

虚拟列是否为数组。默认值为 False

date_formats(可选)

List[str]

Date 类型虚拟列支持的日期格式列表。Date 类型虚拟列必须配置。