Tous les produits
Search
Centre de documentation

Tablestore:Filtres

Dernière mise à jour :Aug 18, 2026

Filtrez les résultats de requête côté serveur en appliquant SingleColumnValueFilter ou CompositeColumnValueFilter dans le SDK PHP Tablestore.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Fonctionnement des filtres

Les filtres s'exécutent sur le serveur après que Tablestore a lu les lignes correspondant à votre plage de clés primaires, mais avant de renvoyer les résultats à votre application. La lecture ayant lieu en premier, les filtres ne réduisent pas la consommation d'unités de capacité (CU) de lecture : votre application est facturée pour la lecture de toutes les lignes de la plage, quel que soit le nombre de lignes validées par le filtre. Utilisez les filtres pour réduire le transfert réseau et le traitement côté application, et non pour diminuer les coûts de lecture.

Si un filtre ne réduit pas significativement l'ensemble des résultats, envisagez d'utiliser une plage de clés primaires plus sélective ou un index secondaire.

Tablestore propose deux types de filtres :

  • SingleColumnValueFilter : évalue une seule colonne d'attribut par rapport à une condition.

  • CompositeColumnValueFilter : combine jusqu'à 32 conditions de filtrage à l'aide des opérateurs logiques AND, OR ou NOT.

SingleColumnValueFilter

Utilisez SingleColumnValueFilter pour filtrer les lignes en fonction de la valeur d'une colonne d'attribut.

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

Paramètres

Nom

Type

Description

Valeur par défaut

column_name (obligatoire)

string

Nom de la colonne d'attribut à évaluer.

value (obligatoire)

STRING, INTEGER, BINARY, DOUBLE ou BOOLEAN

Valeur de référence à comparer.

comparator (obligatoire)

ComparatorTypeConst

Opérateur relationnel. Valeurs valides : CONST_EQUAL (=), CONST_NOT_EQUAL (!=), CONST_GREATER_THAN (>), CONST_GREATER_EQUAL (>=), CONST_LESS_THAN (<) et CONST_LESS_EQUAL (<=).

pass_if_missing (facultatif)

bool

Indique s'il faut renvoyer une ligne lorsque la colonne d'attribut spécifiée n'existe pas dans cette ligne. Définissez la valeur sur false pour exclure les lignes auxquelles il manque la colonne.

true

latest_version_only (facultatif)

bool

Indique s'il faut évaluer uniquement la dernière version de la colonne d'attribut. Définissez la valeur sur false pour renvoyer la ligne si n'importe quelle version satisfait la condition.

true

Exemple

L'exemple suivant lit les lignes dont les clés primaires se situent dans la plage [row1, row3) à l'aide de getRange, puis applique un filtre pour ne renvoyer que les lignes où col1 est égal à val1.

$request = array (
    'table_name' => 'test_table',
    // Set the start primary key for the range query.
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // Set the end primary key for the range query. The result does not include this key.
    'exclusive_end_primary_key'  => array (
        array('id', 'row3')
    ),
    // Read data in forward order.
    'direction' => DirectionConst::CONST_FORWARD,
    // Read the latest version of data.
    'max_versions' => 1,
    // Return only rows where col1 equals "val1".
    'column_filter' => array (
        'column_name' => 'col1',
        'value' => 'val1',
        'comparator' => ComparatorTypeConst::CONST_EQUAL
    )
);

try {
    // Call getRange to read rows.
    $response = $client->getRange ($request);

    // Process the response.
    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.";
}
  • Pour exclure les lignes qui ne contiennent pas la colonne d'attribut spécifiée, définissez pass_if_missing sur false :

    $request['column_filter']['pass_if_missing'] = false;
  • Pour renvoyer une ligne si n'importe quelle version de la colonne d'attribut satisfait la condition (et pas seulement la dernière), définissez latest_version_only sur false :

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

CompositeColumnValueFilter

Utilisez CompositeColumnValueFilter pour combiner jusqu'à 32 conditions de filtrage à l'aide d'opérateurs logiques.

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

Paramètres

Nom

Type

Description

logical_operator (obligatoire)

LogicalOperatorConst

Opérateur logique. Valeurs valides : CONST_NOT (NOT), CONST_AND (AND) et CONST_OR (OR).

sub_filters (obligatoire)

array

Filtres à combiner. Chaque élément peut être un SingleColumnValueFilter ou un autre CompositeColumnValueFilter.

Exemple

L'exemple suivant lit les lignes dont les clés primaires se situent dans la plage [row1, row3) et applique un filtre composite avec la condition (col1 = val1 OR col2 = val2) AND (col3 = val3).

$request = array (
    'table_name' => 'test_table',
    // Set the start primary key for the range query.
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // Set the end primary key for the range query. The result does not include this key.
    'exclusive_end_primary_key'  => array (
        array('id', 'row3')
    ),
    // Read data in forward order.
    'direction' => DirectionConst::CONST_FORWARD,
    // Read the latest version of data.
    'max_versions' => 1
);

// Combine conditions: (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 {
    // Call getRange to read rows.
    $response = $client->getRange ($request);

    // Process the response.
    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.";
}

Références