Todos los productos
Search
Centro de documentos

Tablestore:Filtros

Última actualización: Sep 22, 2026

Filtre los resultados de las consultas en el servidor mediante SingleColumnValueFilter o CompositeColumnValueFilter en el SDK de PHP para Tablestore.

Requisitos previos

Antes de empezar, asegúrese de que cuenta con lo siguiente:

Funcionamiento de los filtros

Los filtros se ejecutan en el servidor después de que Tablestore lee las filas que coinciden con el rango de claves primarias, pero antes de devolver los resultados a su aplicación. Dado que la lectura ocurre primero, los filtros no reducen el consumo de unidades de capacidad de lectura (CU). Se cobra a la aplicación por leer todas las filas del rango, sin importar cuántas filas apruebe el filtro. Use los filtros para reducir la transferencia de red y el procesamiento en la aplicación, no para disminuir los costos de lectura.

Si un filtro no reduce significativamente el conjunto de resultados, considere usar un rango de claves primarias más selectivo o un índice secundario.

Tablestore ofrece dos tipos de filtros:

  • SingleColumnValueFilter: evalúa una sola columna de atributos con respecto a una condición.

  • CompositeColumnValueFilter: combina hasta 32 condiciones de filtro con los operadores lógicos AND, OR o NOT.

SingleColumnValueFilter

Use SingleColumnValueFilter para filtrar filas según el valor de una columna de atributos.

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

Parámetros

Nombre

Tipo

Descripción

Valor predeterminado

column_name (obligatorio)

string

Nombre de la columna de atributos que se va a evaluar.

—

value (obligatorio)

STRING, INTEGER, BINARY, DOUBLE o BOOLEAN

Valor de referencia para la comparación.

—

comparator (obligatorio)

ComparatorTypeConst

Operador relacional. Valores válidos: CONST_EQUAL (=), CONST_NOT_EQUAL (!=), CONST_GREATER_THAN (>), CONST_GREATER_EQUAL (>=), CONST_LESS_THAN (<) y CONST_LESS_EQUAL (<=).

—

pass_if_missing (opcional)

bool

Indica si se debe devolver una fila cuando la columna de atributos especificada no existe en dicha fila. Establezca este parámetro en false para excluir las filas que no contienen la columna.

true

latest_version_only (opcional)

bool

Indica si se evalúa únicamente la versión más reciente de la columna de atributos. Establezca este parámetro en false para devolver la fila si cualquier versión cumple la condición.

true

Ejemplo

A continuación se muestra un ejemplo que lee filas con claves primarias en el rango [row1, row3) mediante getRange. Después aplica un filtro para devolver solo las filas donde col1 es igual a 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.";
}
  • Para excluir las filas que no contienen la columna de atributos especificada, establezca pass_if_missing en false:

    $request['column_filter']['pass_if_missing'] = false;
  • Para devolver una fila si cualquier versión de la columna de atributos cumple la condición, y no solo la más reciente, establezca latest_version_only en false:

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

CompositeColumnValueFilter

Use CompositeColumnValueFilter para combinar hasta 32 condiciones de filtro con operadores lógicos.

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

Parámetros

Nombre

Tipo

Descripción

logical_operator (obligatorio)

LogicalOperatorConst

Operador lógico. Valores válidos: CONST_NOT (NOT), CONST_AND (AND) y CONST_OR (OR).

sub_filters (obligatorio)

array

Filtros que se van a combinar. Cada elemento puede ser un SingleColumnValueFilter u otro CompositeColumnValueFilter.

Ejemplo

El siguiente ejemplo lee filas con claves primarias en el rango [row1, row3) y aplica un filtro compuesto con la condición (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.";
}

Referencias