全部產品
Search
文件中心

Tablestore:過濾器

更新時間:Mar 10, 2026

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

前提條件

初始化Tablestore Client

過濾器類型

Table Store的過濾器類型包括以下 2 種。

  • 單屬性列值過濾器(SingleColumnValueFilter):判斷單個屬性列的值是否符合條件。

  • 組合過濾器(CompositeColumnValueFilter):將多個條件組合進行資料過濾。

單屬性列值過濾器

[
    'column_name' => '<string>',
    'value' => <ColumnValue>,
    'comparator' => <ComparatorType>,
    'pass_if_missing' => true || false,
    'latest_version_only' => true || false
]

參數說明

名稱

類型

說明

comparator(必選)

ComparatorTypeConst

關係運算子,包括 CONST_EQUAL(等於)、CONST_NOT_EQUAL(不等於)、CONST_GREATER_THAN(大於)、CONST_GREATER_EQUAL(大於等於)、CONST_LESS_THAN(小於)、CONST_LESS_EQUAL(小於等於)。

column_name(必選)

string

判斷的屬性列名稱。

value(必選)

STRING,INTEGER,BINARY,DOUBLE,BOOLEAN

判斷的值。

pass_if_missing(可選)

bool

行資料不包含判斷的屬性列時,是否返回該行,預設值為 true,即返回該行資料。

latest_version_only(可選)

bool

是否只判斷查詢結果中最新的資料版本,預設值為 true,即當參考的屬性列存在多個資料版本時,只判斷最新的資料版本是否符合過濾條件。

範例程式碼

以下範例程式碼以範圍查詢為例查詢主索引值為 [row1, row3) 的行資料,並在查詢後進行過濾,返回 col1 屬性列的值等於 val1 的行資料。

$request = array (
    'table_name' => 'test_table',
    // 設定查詢起始主鍵
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // 設定查詢結束主鍵(返回結果不包含結束主鍵)
    'exclusive_end_primary_key'  => array (
        array('id', 'row3')
    ),
    // 設定正向讀取資料
    'direction' => DirectionConst::CONST_FORWARD,
    // 設定查詢版本
    'max_versions' => 1,
    // 構造過濾器,條件為 col1 == "val1"
    'column_filter' => array (
        'column_name' => 'col1',
        'value' => 'val1',
        'comparator' => ComparatorTypeConst::CONST_EQUAL
    )
);

try {
    // 調用 getRange 方法讀取行資料
    $response = $client->getRange ($request);

    // 返回結果處理
    echo "* Read CU Cost: " . $response['consumed']['capacity_unit']['read'] . "\n";
    echo "* Write CU Cost: " . $response['consumed']['capacity_unit']['write'] . "\n";
    echo "* Row Data: " . "\n";
    foreach ($response['rows'] as $row) {
        echo json_encode($row) . "\n";
    }
} catch (Exception $e){
    echo "Get Range failed.";
}
  • 設定行資料不包含判斷的屬性列時,不返回該行。

    $request['column_filter']['pass_if_missing'] = false;
  • 設定判斷查詢結果中所有版本的資料,此時只要有一個版本的資料符合條件,即返回該行資料。

    $request['column_filter']['latest_version_only'] = false;

組合過濾器

最多支援 32 個條件的組合。

[
    'logical_operator' => <LogicalOperator>
    'sub_filters' => [
        <ColumnFilter>,
        <ColumnFilter>,
        <ColumnFilter>,
         // other conditions
        ]
    ]

參數說明

名稱

類型

說明

logical_operator(必選)

LogicalOperatorConst

邏輯運算子,包括 CONST_NOT(非)、CONST_AND(與)、CONST_OR(或)。

sub_filters(必選)

array

參與邏輯運算的過濾器,包括單屬性列值過濾器組合過濾器

範例程式碼

以下範例程式碼以範圍查詢為例查詢主索引值為 [row1, row3) 的行資料,並使用組合過濾器進行資料過濾。

$request = array (
    'table_name' => 'test_table',
    // 設定查詢起始主鍵
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // 設定查詢結束主鍵(返回結果不包含結束主鍵)
    'exclusive_end_primary_key'  => array (
        array('id', 'row3')
    ),
    // 設定正向讀取資料
    'direction' => DirectionConst::CONST_FORWARD,
    // 設定查詢版本
    'max_versions' => 1
);

// 組合條件,判斷條件為 (col1 = val1 or col2 = val2) and (col3 = val3)
$request['column_filter'] = array(
    'logical_operator' => LogicalOperatorConst::CONST_AND,
    'sub_filters' => array(
        array(
            'logical_operator' => LogicalOperatorConst::CONST_OR,
            'sub_filters' => array(
                array(
                    'comparator' => ComparatorTypeConst::CONST_EQUAL,
                    'column_name' => 'col1',
                    'value' => 'val1'
                ),
                array(
                    'comparator' => ComparatorTypeConst::CONST_EQUAL,
                    'column_name' => 'col2',
                    'value' => 'val2'
                )
            )
        ),
        array(
            'comparator' => ComparatorTypeConst::CONST_EQUAL,
            'column_name' => 'col3',
            'value' => 'val3'
        )
    )
);

try {
    // 調用 getRange 方法讀取行資料
    $response = $client->getRange ($request);

    // 返回結果處理
    echo "* Read CU Cost: " . $response['consumed']['capacity_unit']['read'] . "\n";
    echo "* Write CU Cost: " . $response['consumed']['capacity_unit']['write'] . "\n";
    echo "* Row Data: " . "\n";
    foreach ($response['rows'] as $row) {
        echo json_encode($row) . "\n";
    }
} catch (Exception $e){
    echo "Get Range failed.";
}

相關文檔