全部產品
Search
文件中心

Tablestore:過濾器

更新時間:Mar 31, 2026

Table Store支援在查詢資料時使用過濾器在服務端按指定條件進行資料過濾,本文介紹如何在 Python SDK 中使用過濾器。

前提條件

初始化Tablestore Client

過濾器類型

Table Store的過濾器類型包括以下 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)

相關文檔