Todos os produtos
Search
Central de documentação

Tablestore:Filters

Última atualização: Jul 03, 2026

Use filtros no Tablestore para refinar resultados de consulta no servidor com base em condições específicas. Este tópico descreve como usar filtros no SDK para .NET.

Pré-requisitos

Inicializar um cliente do Tablestore

Tipos de filtro

O Tablestore oferece dois tipos de filtros:

  • RelationalCondition: Verifica se o valor de uma única coluna de atributo atende a uma condição especificada.

  • CompositeCondition: Combina várias condições para filtrar dados.

RelationalCondition

public class RelationalCondition : IColumnCondition

Parâmetros

Parâmetro

Tipo

Descrição

Operator (Obrigatório)

CompareOperator

Operador relacional. Os operadores compatíveis incluem EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN e LESS_EQUAL.

ColumnName (Obrigatório)

string

Nome da coluna de atributo a avaliar.

ColumnValue (Obrigatório)

ColumnValue

Valor usado na comparação.

PassIfMissing (Opcional)

bool

Controla se uma linha deve ser retornada quando a coluna de atributo especificada estiver ausente. O valor padrão true retorna a linha.

LatestVersionsOnly (Opcional)

bool

Define se apenas a versão mais recente dos dados de uma coluna de atributo será avaliada, mesmo que existam várias versões. O padrão é true.

Exemplo

Este exemplo executa uma consulta de intervalo para linhas cuja chave primária está no intervalo [row1, row3). Em seguida, aplica um filtro para retornar apenas as linhas em que a coluna de atributo col1 seja igual a val1.

try
{
    // Set the start primary key for the query.
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    // Set the end primary key for the query. The end key is exclusive.
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row3") }
    };
    // Create a filter with the condition: col1 == "val1".
    RelationalCondition relationalCondition = new RelationalCondition("col1", CompareOperator.EQUAL, new ColumnValue("val1"));

    // Call the GetRange method to read row data.
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, null, null, relationalCondition);
    GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);

    // Process the response.
    Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
    Console.WriteLine($"Read CU Cost: {getRangeResponse.ConsumedCapacityUnit.Read}");
    Console.WriteLine($"Write CU Cost: {getRangeResponse.ConsumedCapacityUnit.Write}");
    Console.WriteLine("Row Data: ");
    foreach (Row row in getRangeResponse.RowDataList)
    {
        Console.WriteLine(row);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Get Range failed, exception: {ex.Message}");
}
  • Para excluir linhas sem a coluna de atributo especificada, defina PassIfMissing como false.

    relationalCondition.PassIfMissing = false;

CompositeCondition

É possível combinar até 32 condições.

public class CompositeCondition : IColumnCondition

Parâmetros

Parâmetro

Tipo

Descrição

LogicOperator (Obrigatório)

LogicOperator

Operador lógico. Os operadores compatíveis são NOT, AND e OR.

subConditions (Obrigatório)

List<IColumnCondition>

Lista de filtros a combinar pelo operador lógico. A lista pode incluir objetos RelationalCondition e CompositeCondition.

Exemplo

O exemplo abaixo demonstra uma consulta de intervalo para linhas com chave primária no intervalo [row1, row3), usando um CompositeCondition para filtrar os resultados.

try
{
    // Set the start primary key for the query.
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    // Set the end primary key for the query. The end key is exclusive.
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row3") }
    };

    // Create RelationalCondition 1: col1 == "val1".
    RelationalCondition relationalCondition1 = new RelationalCondition("col1", CompareOperator.EQUAL, new ColumnValue("val1"));
    // Create RelationalCondition 2: col2 == "val2".
    RelationalCondition relationalCondition2 = new RelationalCondition("col2", CompareOperator.EQUAL, new ColumnValue("val2"));
    // Create CompositeCondition 1: col1 == "val1" OR col2 == "val2".
    CompositeCondition compositeCondition1 = new CompositeCondition(LogicOperator.OR);
    compositeCondition1.AddCondition(relationalCondition1);
    compositeCondition1.AddCondition(relationalCondition2);
    // Create RelationalCondition 3: col3 == "val3".
    RelationalCondition relationalCondition3 = new RelationalCondition("col3", CompareOperator.EQUAL, new ColumnValue("val3"));
    // Create CompositeCondition 2, which combines the previous conditions: (col1 == "val1" OR col2 == "val2") AND col3 == "val3".
    CompositeCondition compositeCondition2 = new CompositeCondition(LogicOperator.AND);
    compositeCondition2.AddCondition(compositeCondition1);
    compositeCondition2.AddCondition(relationalCondition3);

    // Call the GetRange method to read row data.
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, null, null, compositeCondition2);
    GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);

    // Process the response.
    Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
    Console.WriteLine($"Read CU Cost: {getRangeResponse.ConsumedCapacityUnit.Read}");
    Console.WriteLine($"Write CU Cost: {getRangeResponse.ConsumedCapacityUnit.Write}");
    Console.WriteLine("Row Data: ");
    foreach (Row row in getRangeResponse.RowDataList)
    {
        Console.WriteLine(row);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Get Range failed, exception: {ex.Message}");
}

Referências