全部产品
Search
文档中心

表格存储:过滤器

更新时间:Mar 30, 2026

表格存储支持在查询数据时使用过滤器在服务端按指定条件进行数据过滤,本文介绍如何在 Python SDK 中使用过滤器。

前提条件

初始化Tablestore Client

过滤器类型

表格存储的过滤器类型包括以下 2 种。

  • 单属性列值过滤器(SingleColumnCondition):判断单个属性列的值是否符合条件。

  • 组合过滤器(CompositeColumnCondition):将多个条件组合进行数据过滤。

单属性列值过滤器

class SingleColumnCondition(ColumnCondition)

参数说明

名称

类型

说明

comparator(必选)

ComparatorType

关系运算符,包括 EQUAL(等于)、NOT_EQUAL(不等于)、GREATER_THAN(大于)、GREATER_EQUAL(大于等于)、LESS_THAN(小于)、LESS_EQUAL(小于等于)。

column_name(必选)

str

判断的属性列名称。

column_value(必选)

str,int,bytes,float,bool

判断的值。

pass_if_missing(可选)

bool

行数据不包含判断的属性列时,是否返回该行,默认值为 True,即返回该行数据。

latest_version_only(可选)

bool

是否只判断查询结果中最新的数据版本,默认值为 True,即当参考的属性列存在多个数据版本时,只判断最新的数据版本是否符合过滤条件。

示例代码

以下示例代码以范围查询为例查询主键值为 [row1, row3) 的行数据,并在查询后进行过滤,返回 col1 属性列的值等于 val1 的行数据。

try:
    # 设置查询起始主键
    inclusive_start_primary_key = [('id', 'row1')]
    # 设置查询结束主键(返回结果不包含结束主键)
    exclusive_end_primary_key = [('id', 'row3')]

    # 构造过滤器,条件为 col1 == "val1"
    singleColumnCondition = SingleColumnCondition('col1', 'val1', ComparatorType.EQUAL)

    # 调用 get_range 方法查询数据
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key,
                                                                              column_filter=singleColumnCondition)

    # 返回结果处理
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("Range get failed with error: %s" % e)
  • 设置行数据不包含判断的属性列时,不返回该行。

    singleColumnCondition.pass_if_missing = False
  • 设置判断查询结果中所有版本的数据,此时只要有一个版本的数据符合条件,即返回该行数据。

    singleColumnCondition.latest_version_only = False

组合过滤器

最多支持 32 个条件的组合。

class CompositeColumnCondition(ColumnCondition)

参数说明

名称

类型

说明

combinator(必选)

LogicalOperator

逻辑运算符,包括 NOT(非)、AND(与)、OR(或)。

sub_conditions(必选)

List[ColumnCondition]

参与逻辑运算的过滤器,包括单属性列值过滤器组合过滤器

示例代码

以下示例代码以范围查询为例查询主键值为 [row1, row3) 的行数据,并使用组合过滤器进行数据过滤。

try:
    # 设置查询起始主键
    inclusive_start_primary_key = [('id', 'row1')]

    # 设置查询结束主键(返回结果不包含结束主键)
    exclusive_end_primary_key = [('id', 'row3')]

    # 构造单属性列值过滤器1,条件为 col1 == "val1"
    singleColumnCondition1 = SingleColumnCondition('col1', 'val1', ComparatorType.EQUAL)
    # 构造单属性列值过滤器2,条件为 col2 == "val2"
    singleColumnCondition2 = SingleColumnCondition('col2', 'val2', ComparatorType.EQUAL)
    # 构造组合过滤器1,条件为 col1 == "val1" or col2 == "val2"
    compositeColumnCondition1 = CompositeColumnCondition(LogicalOperator.OR)
    compositeColumnCondition1.add_sub_condition(singleColumnCondition1)
    compositeColumnCondition1.add_sub_condition(singleColumnCondition2)
    # 构造单属性列值过滤器3,条件为 col3 == "val3"
    singleColumnCondition3 = SingleColumnCondition('col3', 'val3', ComparatorType.EQUAL)
    # 构造组合过滤器2,条件为 组合过滤器1 and 单属性列值过滤器3,即 (col1 == "val1" or col2 == "val2") and col3 == "val3"
    compositeColumnCondition2 = CompositeColumnCondition(LogicalOperator.AND)
    compositeColumnCondition2.add_sub_condition(compositeColumnCondition1)
    compositeColumnCondition2.add_sub_condition(singleColumnCondition3)

    # 调用 get_range 方法查询数据
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key,
                                                                              column_filter=compositeColumnCondition2)

    # 返回结果处理
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("Range get failed with error: %s" % e)

相关文档